add missing wiki pages from taginfo fr
This commit is contained in:
parent
e056cfc8fa
commit
dffb21b56e
8 changed files with 469 additions and 131 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -35,4 +35,5 @@ public/*.json
|
|||
|
||||
.idea
|
||||
|
||||
html_cache/*
|
||||
html_cache/*
|
||||
/html_cache/
|
||||
|
|
|
@ -778,6 +778,7 @@ class WikiController extends AbstractController
|
|||
$scriptPath = $this->getParameter('kernel.project_dir') . '/wiki_compare/wiki_compare.py';
|
||||
$englishHtml = null;
|
||||
$frenchHtml = null;
|
||||
$frenchCacheExists = false;
|
||||
|
||||
if (file_exists($scriptPath)) {
|
||||
// Create a temporary Python script to fetch the page content
|
||||
|
@ -788,25 +789,52 @@ class WikiController extends AbstractController
|
|||
|
||||
import sys
|
||||
import json
|
||||
from wiki_compare import fetch_wiki_page
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
from wiki_compare import fetch_wiki_page, HTML_CACHE_DIR
|
||||
|
||||
# Get the key from command line arguments
|
||||
key = sys.argv[1]
|
||||
language = sys.argv[2]
|
||||
|
||||
# Fetch the page
|
||||
page = fetch_wiki_page(key, language)
|
||||
# Check if we're just checking cache existence
|
||||
check_cache_only = len(sys.argv) > 3 and sys.argv[3] == 'check_cache'
|
||||
|
||||
# Output the HTML content
|
||||
if page and 'html_content' in page:
|
||||
print(page['html_content'])
|
||||
if check_cache_only and language == 'fr':
|
||||
# For French pages, construct the URL to check cache
|
||||
if key.startswith('http'):
|
||||
url = key
|
||||
else:
|
||||
url = f"https://wiki.openstreetmap.org/wiki/FR:{key}"
|
||||
|
||||
# Create cache key
|
||||
cache_key = hashlib.md5(url.encode()).hexdigest()
|
||||
cache_file = Path(HTML_CACHE_DIR) / f"{cache_key}.html"
|
||||
|
||||
# Check if cache exists
|
||||
if cache_file.exists():
|
||||
print("CACHE_EXISTS")
|
||||
else:
|
||||
print("CACHE_MISSING")
|
||||
else:
|
||||
print("")
|
||||
# Normal fetch operation
|
||||
page = fetch_wiki_page(key, language)
|
||||
|
||||
# Output the HTML content
|
||||
if page and 'html_content' in page:
|
||||
print(page['html_content'])
|
||||
else:
|
||||
print("")
|
||||
EOT;
|
||||
|
||||
file_put_contents($tempScriptPath, $pythonCode);
|
||||
chmod($tempScriptPath, 0755);
|
||||
|
||||
// First check if French page exists in cache
|
||||
$command = "cd " . $this->getParameter('kernel.project_dir') . "/wiki_compare && python3 {$tempScriptPath} {$key} fr check_cache";
|
||||
$cacheCheckResult = trim(shell_exec($command));
|
||||
$frenchCacheExists = ($cacheCheckResult === "CACHE_EXISTS");
|
||||
|
||||
// Fetch English page
|
||||
$command = "cd " . $this->getParameter('kernel.project_dir') . "/wiki_compare && python3 {$tempScriptPath} {$key} en";
|
||||
$englishHtml = shell_exec($command);
|
||||
|
@ -834,7 +862,8 @@ EOT;
|
|||
'english_url' => $englishUrl,
|
||||
'french_edit_url' => $frenchEditUrl,
|
||||
'english_html' => $englishHtml,
|
||||
'french_html' => $frenchHtml
|
||||
'french_html' => $frenchHtml,
|
||||
'french_cache_exists' => $frenchCacheExists
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -1104,7 +1133,25 @@ EOT;
|
|||
if (file_exists($pagesUnavailableInEnglishFile)) {
|
||||
$pagesUnavailableInEnglishData = json_decode(file_get_contents($pagesUnavailableInEnglishFile), true);
|
||||
if (isset($pagesUnavailableInEnglishData['pages']) && is_array($pagesUnavailableInEnglishData['pages'])) {
|
||||
$pagesUnavailableInEnglish = $pagesUnavailableInEnglishData['pages'];
|
||||
// Deduplicate pages based on URL
|
||||
$uniquePages = [];
|
||||
$seenUrls = [];
|
||||
|
||||
foreach ($pagesUnavailableInEnglishData['pages'] as $page) {
|
||||
if (isset($page['url'])) {
|
||||
// Use URL as the key for deduplication
|
||||
$url = $page['url'];
|
||||
if (!isset($seenUrls[$url])) {
|
||||
$seenUrls[$url] = true;
|
||||
$uniquePages[] = $page;
|
||||
}
|
||||
} else {
|
||||
// If no URL, keep the page (shouldn't happen, but just in case)
|
||||
$uniquePages[] = $page;
|
||||
}
|
||||
}
|
||||
|
||||
$pagesUnavailableInEnglish = $uniquePages;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1112,10 +1159,10 @@ EOT;
|
|||
$specificPages = [];
|
||||
$outdatedPagesFile = $this->getParameter('kernel.project_dir') . '/wiki_compare/outdated_pages.json';
|
||||
if (file_exists($outdatedPagesFile)) {
|
||||
$outdatedPagesData = json_decode(file_get_contents($outdatedPagesFile), true);
|
||||
if (isset($outdatedPagesData['specific_pages']) && is_array($outdatedPagesData['specific_pages'])) {
|
||||
$specificPages = $outdatedPagesData['specific_pages'];
|
||||
}
|
||||
// Use a memory-efficient approach to extract only the specific_pages array
|
||||
// without loading the entire file into memory
|
||||
$maxPages = 100; // Limit the number of pages to prevent memory exhaustion
|
||||
$specificPages = $this->extractSpecificPagesFromJson($outdatedPagesFile, $maxPages);
|
||||
}
|
||||
|
||||
// Load newly created French pages
|
||||
|
@ -1137,6 +1184,16 @@ EOT;
|
|||
$availableTranslations = $translationsData['translations'];
|
||||
}
|
||||
}
|
||||
|
||||
// Load keys without wiki pages
|
||||
$keysWithoutWiki = [];
|
||||
$keysWithoutWikiFile = $this->getParameter('kernel.project_dir') . '/wiki_compare/keys_without_wiki.json';
|
||||
if (file_exists($keysWithoutWikiFile)) {
|
||||
$keysWithoutWikiData = json_decode(file_get_contents($keysWithoutWikiFile), true);
|
||||
if (is_array($keysWithoutWikiData)) {
|
||||
$keysWithoutWiki = $keysWithoutWikiData;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->render('admin/wiki.html.twig', [
|
||||
'wiki_pages' => $wikiPages,
|
||||
|
@ -1147,7 +1204,8 @@ EOT;
|
|||
'newly_created_pages' => $newlyCreatedPages,
|
||||
'staleness_stats' => $stalenessStats,
|
||||
'wiki_pages_stats' => $wikiPagesStats,
|
||||
'available_translations' => $availableTranslations
|
||||
'available_translations' => $availableTranslations,
|
||||
'keys_without_wiki' => $keysWithoutWiki
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -1791,4 +1849,124 @@ EOT;
|
|||
|
||||
return $contentHtml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the specific_pages array from a large JSON file without loading the entire file into memory
|
||||
*
|
||||
* @param string $filePath Path to the JSON file
|
||||
* @param int $maxPages Maximum number of pages to extract (to prevent memory exhaustion)
|
||||
* @return array The extracted specific_pages array
|
||||
*/
|
||||
private function extractSpecificPagesFromJson(string $filePath, int $maxPages = 100): array
|
||||
{
|
||||
$specificPages = [];
|
||||
|
||||
// For very large files, we'll use a more direct approach
|
||||
// Instead of parsing the entire JSON structure, we'll extract just what we need
|
||||
|
||||
// First, check if the file exists and is readable
|
||||
if (!is_readable($filePath)) {
|
||||
return $specificPages;
|
||||
}
|
||||
|
||||
// Get the file size
|
||||
$fileSize = filesize($filePath);
|
||||
if ($fileSize === false || $fileSize === 0) {
|
||||
return $specificPages;
|
||||
}
|
||||
|
||||
// For very large files, we'll use a more efficient approach
|
||||
// We'll search for the "specific_pages" key directly
|
||||
$handle = fopen($filePath, 'r');
|
||||
if (!$handle) {
|
||||
return $specificPages;
|
||||
}
|
||||
|
||||
// Variables to track parsing state
|
||||
$inSpecificPages = false;
|
||||
$bracketCount = 0;
|
||||
$buffer = '';
|
||||
$pageCount = 0;
|
||||
$lineCount = 0;
|
||||
|
||||
// Skip ahead to find the specific_pages key more quickly
|
||||
// This is a simple optimization for this specific file structure
|
||||
$found = false;
|
||||
while (!$found && ($line = fgets($handle)) !== false) {
|
||||
$lineCount++;
|
||||
if (strpos($line, '"specific_pages"') !== false) {
|
||||
$found = true;
|
||||
$inSpecificPages = true;
|
||||
|
||||
// Find the opening bracket of the array
|
||||
if (strpos($line, '[') !== false) {
|
||||
$bracketCount = 1;
|
||||
$buffer = '['; // Start the buffer with an opening bracket
|
||||
} else {
|
||||
// If the opening bracket is on the next line
|
||||
$nextLine = fgets($handle);
|
||||
if ($nextLine !== false && strpos($nextLine, '[') !== false) {
|
||||
$bracketCount = 1;
|
||||
$buffer = '['; // Start the buffer with an opening bracket
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find the specific_pages key, return empty array
|
||||
if (!$found) {
|
||||
fclose($handle);
|
||||
return $specificPages;
|
||||
}
|
||||
|
||||
// Now process the specific_pages array
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
// Count opening and closing brackets to track array nesting
|
||||
$openBrackets = substr_count($line, '[') + substr_count($line, '{');
|
||||
$closeBrackets = substr_count($line, ']') + substr_count($line, '}');
|
||||
$bracketCount += $openBrackets - $closeBrackets;
|
||||
|
||||
// Add the line to our buffer
|
||||
$buffer .= $line;
|
||||
|
||||
// If we've reached the end of the array (bracketCount = 0)
|
||||
if ($bracketCount === 0) {
|
||||
// Parse the buffer as JSON
|
||||
$parsedData = json_decode($buffer, true);
|
||||
if (is_array($parsedData)) {
|
||||
// Limit the number of pages to prevent memory exhaustion
|
||||
$specificPages = array_slice($parsedData, 0, $maxPages);
|
||||
} else {
|
||||
// If parsing fails, log the error but don't crash
|
||||
error_log('Failed to parse specific_pages JSON data in ' . $filePath);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Check if we've found a complete page object (when we see a closing brace followed by a comma)
|
||||
if (preg_match('/\}\s*,\s*$/m', $line)) {
|
||||
$pageCount++;
|
||||
// If we've reached the maximum number of pages, stop processing
|
||||
if ($pageCount >= $maxPages) {
|
||||
// Close the array properly
|
||||
$buffer = rtrim($buffer, ",\r\n") . ']';
|
||||
// Parse the buffer as JSON
|
||||
$parsedData = json_decode($buffer, true);
|
||||
if (is_array($parsedData)) {
|
||||
$specificPages = $parsedData;
|
||||
} else {
|
||||
// If parsing fails, log the error but don't crash
|
||||
error_log('Failed to parse specific_pages JSON data in ' . $filePath . ' after reaching max pages');
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close the file
|
||||
fclose($handle);
|
||||
|
||||
return $specificPages;
|
||||
}
|
||||
}
|
|
@ -492,6 +492,56 @@
|
|||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if keys_without_wiki is defined and keys_without_wiki|length > 0 %}
|
||||
<div class="card mb-4">
|
||||
<div class="card-header bg-warning text-dark">
|
||||
<h2>Clés sans page wiki ({{ keys_without_wiki|length }})</h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p>Ces clés OSM sont utilisées en France mais n'ont pas de page wiki. Vous pouvez contribuer en créant une page pour ces clés.</p>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th>Clé</th>
|
||||
<th>Nombre d'utilisations</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for key in keys_without_wiki %}
|
||||
<tr>
|
||||
<td>
|
||||
<strong>{{ key.key }}</strong>
|
||||
</td>
|
||||
<td>
|
||||
{{ key.count|number_format(0, ',', ' ') }}
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<div class="btn-group" role="group">
|
||||
<a href="https://wiki.openstreetmap.org/w/index.php?title=Key:{{ key.key }}&action=edit" target="_blank"
|
||||
class="btn btn-sm btn-outline-primary" title="Créer une page wiki en anglais">
|
||||
<i class="bi bi-plus-circle"></i> Créer EN
|
||||
</a>
|
||||
<a href="https://wiki.openstreetmap.org/w/index.php?title=FR:Key:{{ key.key }}&action=edit" target="_blank"
|
||||
class="btn btn-sm btn-outline-info" title="Créer une page wiki en français">
|
||||
<i class="bi bi-plus-circle"></i> Créer FR
|
||||
</a>
|
||||
<a href="https://taginfo.openstreetmap.org/keys/{{ key.key }}" target="_blank"
|
||||
class="btn btn-sm btn-outline-secondary" title="Voir sur TagInfo">
|
||||
<i class="bi bi-info-circle"></i> TagInfo
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<p>
|
||||
le score de fraîcheur prend en compte d'avantage la différence entre le nombre de mots que l'ancienneté de
|
||||
modification.
|
||||
|
|
|
@ -140,7 +140,25 @@
|
|||
<div class="iframe-container">
|
||||
<iframe src="{{ english_url }}" title="Version anglaise"></iframe>
|
||||
<div class="iframe-separator"></div>
|
||||
<iframe src="{{ french_edit_url }}" title="Édition française"></iframe>
|
||||
{% if french_cache_exists and french_html %}
|
||||
<div style="flex: 1; border: 1px solid #dee2e6; height: 100%; overflow: auto; padding: 15px;">
|
||||
<div class="alert alert-info mb-3">
|
||||
<i class="bi bi-info-circle"></i> Version française en cache :
|
||||
</div>
|
||||
{{ french_html|raw }}
|
||||
</div>
|
||||
{% else %}
|
||||
{% if french_html %}
|
||||
<iframe src="{{ french_edit_url }}" title="Édition française"></iframe>
|
||||
{% else %}
|
||||
<div style="flex: 1; border: 1px solid #dee2e6; height: 100%; display: flex; justify-content: center; align-items: center; background-color: #f8f9fa;">
|
||||
<div class="alert alert-warning" style="max-width: 80%;">
|
||||
<i class="bi bi-exclamation-triangle"></i> La page française n'existe pas dans le cache.
|
||||
<p class="mt-2 mb-0">Utilisez le formulaire d'édition pour créer la traduction.</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
|
|
|
@ -97,7 +97,25 @@
|
|||
<div class="iframe-container">
|
||||
<iframe src="{{ english_url }}" title="Version anglaise"></iframe>
|
||||
<div class="iframe-separator"></div>
|
||||
<iframe src="{{ french_edit_url }}" title="Édition française"></iframe>
|
||||
{% if french_cache_exists and french_html %}
|
||||
<div style="flex: 1; border: 1px solid #dee2e6; height: 100%; overflow: auto; padding: 15px;">
|
||||
<div class="alert alert-info mb-3">
|
||||
<i class="bi bi-info-circle"></i> Version française en cache :
|
||||
</div>
|
||||
{{ french_html|raw }}
|
||||
</div>
|
||||
{% else %}
|
||||
{% if french_html %}
|
||||
<iframe src="{{ french_edit_url }}" title="Édition française"></iframe>
|
||||
{% else %}
|
||||
<div style="flex: 1; border: 1px solid #dee2e6; height: 100%; display: flex; justify-content: center; align-items: center; background-color: #f8f9fa;">
|
||||
<div class="alert alert-warning" style="max-width: 80%;">
|
||||
<i class="bi bi-exclamation-triangle"></i> La page française n'existe pas dans le cache.
|
||||
<p class="mt-2 mb-0">Utilisez le formulaire d'édition pour créer la traduction.</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="mt-3">
|
||||
|
|
Binary file not shown.
|
@ -37,9 +37,15 @@ from bs4 import BeautifulSoup
|
|||
import logging
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
import nltk
|
||||
from pathlib import Path
|
||||
|
||||
# Try to import nltk, but make it optional
|
||||
try:
|
||||
import nltk
|
||||
NLTK_AVAILABLE = True
|
||||
except ImportError:
|
||||
NLTK_AVAILABLE = False
|
||||
|
||||
# Configure logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
|
@ -50,11 +56,13 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
# Constants
|
||||
TAGINFO_API_URL = "https://taginfo.openstreetmap.org/api/4/keys/all"
|
||||
TAGINFO_FRANCE_API_URL = "https://taginfo.geofabrik.de/europe:france/api/4/keys/without_wiki_page"
|
||||
WIKI_BASE_URL_EN = "https://wiki.openstreetmap.org/wiki/Key:"
|
||||
WIKI_BASE_URL_FR = "https://wiki.openstreetmap.org/wiki/FR:Key:"
|
||||
WIKI_BASE_URL = "https://wiki.openstreetmap.org/wiki/"
|
||||
WIKI_CATEGORY_URL = "https://wiki.openstreetmap.org/wiki/Category:FR:Traductions_d%C3%A9synchronis%C3%A9es"
|
||||
TOP_KEYS_FILE = "top_keys.json"
|
||||
KEYS_WITHOUT_WIKI_FILE = "keys_without_wiki.json"
|
||||
WIKI_PAGES_CSV = "wiki_pages.csv"
|
||||
OUTDATED_PAGES_FILE = "outdated_pages.json"
|
||||
STALENESS_HISTOGRAM_FILE = "staleness_histogram.png"
|
||||
|
@ -63,17 +71,18 @@ NUM_WIKI_PAGES = 2
|
|||
# HTML cache folder
|
||||
HTML_CACHE_DIR = "html_cache"
|
||||
|
||||
# Initialize NLTK for sentence tokenization
|
||||
try:
|
||||
nltk.data.find('tokenizers/punkt')
|
||||
except LookupError:
|
||||
nltk.download('punkt')
|
||||
# Initialize NLTK for sentence tokenization if available
|
||||
if NLTK_AVAILABLE:
|
||||
try:
|
||||
nltk.data.find('tokenizers/punkt')
|
||||
except LookupError:
|
||||
nltk.download('punkt')
|
||||
|
||||
# Also download punkt_tab resource which is needed for sent_tokenize
|
||||
try:
|
||||
nltk.data.find('tokenizers/punkt_tab')
|
||||
except LookupError:
|
||||
nltk.download('punkt_tab')
|
||||
# Also download punkt_tab resource which is needed for sent_tokenize
|
||||
try:
|
||||
nltk.data.find('tokenizers/punkt_tab')
|
||||
except LookupError:
|
||||
nltk.download('punkt_tab')
|
||||
|
||||
# Create HTML cache directory if it doesn't exist
|
||||
Path(HTML_CACHE_DIR).mkdir(exist_ok=True)
|
||||
|
@ -177,6 +186,41 @@ def fetch_top_keys(limit=NUM_WIKI_PAGES):
|
|||
logger.error(f"Error fetching data from TagInfo API: {e}")
|
||||
return []
|
||||
|
||||
def fetch_keys_without_wiki_page(limit=36):
|
||||
"""
|
||||
Fetch keys used in France that are missing a wiki page from TagInfo API
|
||||
|
||||
Args:
|
||||
limit (int): Number of keys to fetch
|
||||
|
||||
Returns:
|
||||
list: List of dictionaries containing key information
|
||||
"""
|
||||
logger.info(f"Fetching top {limit} OSM keys without wiki pages used in France...")
|
||||
|
||||
params = {
|
||||
'page': 1,
|
||||
'rp': limit,
|
||||
'english': 0,
|
||||
'sortname': 'count_all',
|
||||
'sortorder': 'desc'
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.get(TAGINFO_FRANCE_API_URL, params=params)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
|
||||
# Extract just the key names and counts
|
||||
keys_without_wiki = [{'key': item['key'], 'count': item['count_all']} for item in data['data']]
|
||||
|
||||
logger.info(f"Successfully fetched {len(keys_without_wiki)} keys without wiki pages")
|
||||
return keys_without_wiki
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.error(f"Error fetching data from TagInfo France API: {e}")
|
||||
return []
|
||||
|
||||
def load_json_data(filename):
|
||||
"""
|
||||
Load data from a JSON file
|
||||
|
@ -295,6 +339,13 @@ def check_grammar_with_grammalecte(text):
|
|||
logger.warning("Empty text provided for grammar checking")
|
||||
return []
|
||||
|
||||
# Check if grammalecte-cli is available
|
||||
try:
|
||||
subprocess.run(['which', 'grammalecte-cli'], capture_output=True, check=True)
|
||||
except subprocess.CalledProcessError:
|
||||
logger.warning("grammalecte-cli not found, skipping grammar check")
|
||||
return []
|
||||
|
||||
logger.info("Checking grammar with grammalecte-cli...")
|
||||
|
||||
try:
|
||||
|
@ -520,9 +571,13 @@ def fetch_wiki_page(key, language='en', is_specific_page=False, check_grammar=Tr
|
|||
clean_text = content.get_text(separator=' ', strip=True)
|
||||
word_count = len(clean_text.split())
|
||||
|
||||
# Count sentences using NLTK
|
||||
sentences = nltk.sent_tokenize(clean_text)
|
||||
sentence_count = len(sentences)
|
||||
# Count sentences using NLTK if available, otherwise use a simple approximation
|
||||
if NLTK_AVAILABLE and check_grammar:
|
||||
sentences = nltk.sent_tokenize(clean_text)
|
||||
sentence_count = len(sentences)
|
||||
else:
|
||||
# Simple approximation: count periods, exclamation marks, and question marks
|
||||
sentence_count = len(re.findall(r'[.!?]+', clean_text))
|
||||
|
||||
# Check grammar for French pages
|
||||
grammar_suggestions = []
|
||||
|
@ -1098,18 +1153,19 @@ def main():
|
|||
|
||||
This function:
|
||||
1. Fetches the top OSM keys from TagInfo API
|
||||
2. Fetches and processes wiki pages for these keys
|
||||
3. Processes specific wiki pages listed in SPECIFIC_PAGES
|
||||
4. Processes pages from the FR:Traductions_désynchronisées category
|
||||
5. Calculates staleness scores for all pages
|
||||
6. Generates a histogram of staleness scores
|
||||
7. Saves the results to CSV and JSON files
|
||||
8. Prints a list of pages that need updating
|
||||
2. Fetches keys used in France that are missing a wiki page from TagInfo API
|
||||
3. Fetches and processes wiki pages for these keys
|
||||
4. Processes specific wiki pages listed in SPECIFIC_PAGES
|
||||
5. Processes pages from the FR:Traductions_désynchronisées category
|
||||
6. Calculates staleness scores for all pages
|
||||
7. Generates a histogram of staleness scores
|
||||
8. Saves the results to CSV and JSON files
|
||||
9. Prints a list of pages that need updating
|
||||
"""
|
||||
# Parse command-line arguments
|
||||
parser = argparse.ArgumentParser(description='Compare OpenStreetMap wiki pages in English and French.')
|
||||
parser.add_argument('--no-grammar-check', action='store_true',
|
||||
help='Disable grammar checking for French pages')
|
||||
help='Disable grammar checking for French pages', default=False)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Whether to check grammar for French pages
|
||||
|
@ -1131,6 +1187,16 @@ def main():
|
|||
# Save top keys to JSON
|
||||
save_to_json(top_keys, TOP_KEYS_FILE)
|
||||
|
||||
# Fetch keys without wiki pages used in France
|
||||
keys_without_wiki = fetch_keys_without_wiki_page()
|
||||
|
||||
if keys_without_wiki:
|
||||
# Save keys without wiki pages to JSON
|
||||
save_to_json(keys_without_wiki, KEYS_WITHOUT_WIKI_FILE)
|
||||
logger.info(f"Saved {len(keys_without_wiki)} keys without wiki pages to {KEYS_WITHOUT_WIKI_FILE}")
|
||||
else:
|
||||
logger.warning("No keys without wiki pages were fetched.")
|
||||
|
||||
# Fetch wiki pages for each key
|
||||
wiki_pages = []
|
||||
|
||||
|
|
|
@ -3,105 +3,112 @@ building,en,https://wiki.openstreetmap.org/wiki/Key:building,2025-06-10,31,3774,
|
|||
building,fr,https://wiki.openstreetmap.org/wiki/FR:Key:building,2025-05-22,25,3181,544,155,8.91,https://wiki.openstreetmap.org/w/images/thumb/6/61/Emptyhouse.jpg/200px-Emptyhouse.jpg
|
||||
source,en,https://wiki.openstreetmap.org/wiki/Key:source,2025-08-12,27,2752,314,42,113.06,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
source,fr,https://wiki.openstreetmap.org/wiki/FR:Key:source,2024-02-07,23,2593,230,35,113.06,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
highway,en,https://wiki.openstreetmap.org/wiki/Key:highway,2025-04-10,30,4126,780,314,20.35,https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Roads_in_Switzerland_%2827965437018%29.jpg/200px-Roads_in_Switzerland_%2827965437018%29.jpg
|
||||
highway,fr,https://wiki.openstreetmap.org/wiki/FR:Key:highway,2025-01-05,30,4141,695,313,20.35,https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Roads_in_Switzerland_%2827965437018%29.jpg/200px-Roads_in_Switzerland_%2827965437018%29.jpg
|
||||
addr:housenumber,en,https://wiki.openstreetmap.org/wiki/Key:addr:housenumber,2025-07-24,11,330,97,20,14.01,https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/Ferry_Street%2C_Portaferry_%2809%29%2C_October_2009.JPG/200px-Ferry_Street%2C_Portaferry_%2809%29%2C_October_2009.JPG
|
||||
addr:housenumber,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:housenumber,2025-08-23,15,1653,150,77,14.01,https://wiki.openstreetmap.org/w/images/thumb/e/e9/Housenumber-karlsruhe-de.png/200px-Housenumber-karlsruhe-de.png
|
||||
addr:street,en,https://wiki.openstreetmap.org/wiki/Key:addr:street,2024-10-29,12,602,101,16,66.04,https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/UK_-_London_%2830474933636%29.jpg/200px-UK_-_London_%2830474933636%29.jpg
|
||||
addr:street,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:street,2025-08-23,15,1653,150,77,66.04,https://wiki.openstreetmap.org/w/images/thumb/e/e9/Housenumber-karlsruhe-de.png/200px-Housenumber-karlsruhe-de.png
|
||||
addr:city,en,https://wiki.openstreetmap.org/wiki/Key:addr:city,2025-07-29,15,802,105,17,9.93,https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Lillerod.jpg/200px-Lillerod.jpg
|
||||
addr:city,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:city,2025-08-23,15,1653,150,77,9.93,https://wiki.openstreetmap.org/w/images/thumb/e/e9/Housenumber-karlsruhe-de.png/200px-Housenumber-karlsruhe-de.png
|
||||
name,en,https://wiki.openstreetmap.org/wiki/Key:name,2025-07-25,17,2196,281,82,42.39,https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/Helena%2C_Montana.jpg/200px-Helena%2C_Montana.jpg
|
||||
name,fr,https://wiki.openstreetmap.org/wiki/FR:Key:name,2025-01-16,21,1720,187,60,42.39,https://wiki.openstreetmap.org/w/images/3/37/Strakers.jpg
|
||||
addr:postcode,en,https://wiki.openstreetmap.org/wiki/Key:addr:postcode,2024-10-29,14,382,83,11,67.11,https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Farrer_post_code.jpg/200px-Farrer_post_code.jpg
|
||||
addr:postcode,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:postcode,2025-08-23,15,1653,150,77,67.11,https://wiki.openstreetmap.org/w/images/thumb/e/e9/Housenumber-karlsruhe-de.png/200px-Housenumber-karlsruhe-de.png
|
||||
natural,en,https://wiki.openstreetmap.org/wiki/Key:natural,2025-07-17,17,2070,535,189,22.06,https://upload.wikimedia.org/wikipedia/commons/thumb/0/0e/VocaDi-Nature%2CGeneral.jpeg/200px-VocaDi-Nature%2CGeneral.jpeg
|
||||
natural,fr,https://wiki.openstreetmap.org/wiki/FR:Key:natural,2025-04-21,13,1499,455,174,22.06,https://upload.wikimedia.org/wikipedia/commons/thumb/0/0e/VocaDi-Nature%2CGeneral.jpeg/200px-VocaDi-Nature%2CGeneral.jpeg
|
||||
surface,en,https://wiki.openstreetmap.org/wiki/Key:surface,2025-08-28,24,3475,591,238,264.64,https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Transportation_in_Tanzania_Traffic_problems.JPG/200px-Transportation_in_Tanzania_Traffic_problems.JPG
|
||||
surface,fr,https://wiki.openstreetmap.org/wiki/FR:Key:surface,2022-02-22,13,2587,461,232,264.64,https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Transportation_in_Tanzania_Traffic_problems.JPG/200px-Transportation_in_Tanzania_Traffic_problems.JPG
|
||||
addr:country,en,https://wiki.openstreetmap.org/wiki/Key:addr:country,2024-12-01,9,184,65,11,22.96,https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Europe_ISO_3166-1.svg/200px-Europe_ISO_3166-1.svg.png
|
||||
addr:country,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:country,2025-03-25,8,187,65,11,22.96,https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Europe_ISO_3166-1.svg/200px-Europe_ISO_3166-1.svg.png
|
||||
landuse,en,https://wiki.openstreetmap.org/wiki/Key:landuse,2025-03-01,17,2071,446,168,39.41,https://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Changing_landuse_-_geograph.org.uk_-_1137810.jpg/200px-Changing_landuse_-_geograph.org.uk_-_1137810.jpg
|
||||
landuse,fr,https://wiki.openstreetmap.org/wiki/FR:Key:landuse,2024-08-20,19,2053,418,182,39.41,https://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Changing_landuse_-_geograph.org.uk_-_1137810.jpg/200px-Changing_landuse_-_geograph.org.uk_-_1137810.jpg
|
||||
power,en,https://wiki.openstreetmap.org/wiki/Key:power,2025-02-28,20,641,127,21,124.89,https://wiki.openstreetmap.org/w/images/thumb/0/01/Power-tower.JPG/200px-Power-tower.JPG
|
||||
power,fr,https://wiki.openstreetmap.org/wiki/FR:Key:power,2023-06-27,14,390,105,25,124.89,https://wiki.openstreetmap.org/w/images/thumb/0/01/Power-tower.JPG/200px-Power-tower.JPG
|
||||
waterway,en,https://wiki.openstreetmap.org/wiki/Key:waterway,2025-03-10,21,1830,365,118,77.94,https://wiki.openstreetmap.org/w/images/thumb/f/fe/450px-Marshall-county-indiana-yellow-river.jpg/200px-450px-Marshall-county-indiana-yellow-river.jpg
|
||||
waterway,fr,https://wiki.openstreetmap.org/wiki/FR:Key:waterway,2024-03-08,18,1291,272,113,77.94,https://wiki.openstreetmap.org/w/images/thumb/f/fe/450px-Marshall-county-indiana-yellow-river.jpg/200px-450px-Marshall-county-indiana-yellow-river.jpg
|
||||
building:levels,en,https://wiki.openstreetmap.org/wiki/Key:building:levels,2025-08-13,16,1351,204,25,76.11,https://wiki.openstreetmap.org/w/images/thumb/4/47/Building-levels.png/200px-Building-levels.png
|
||||
building:levels,fr,https://wiki.openstreetmap.org/wiki/FR:Key:building:levels,2024-08-01,15,1457,202,26,76.11,https://wiki.openstreetmap.org/w/images/thumb/4/47/Building-levels.png/200px-Building-levels.png
|
||||
amenity,en,https://wiki.openstreetmap.org/wiki/Key:amenity,2025-08-24,29,3066,915,504,160.78,https://wiki.openstreetmap.org/w/images/thumb/a/a5/Mapping-Features-Parking-Lot.png/200px-Mapping-Features-Parking-Lot.png
|
||||
amenity,fr,https://wiki.openstreetmap.org/wiki/FR:Key:amenity,2023-07-19,22,2146,800,487,160.78,https://wiki.openstreetmap.org/w/images/thumb/a/a5/Mapping-Features-Parking-Lot.png/200px-Mapping-Features-Parking-Lot.png
|
||||
barrier,en,https://wiki.openstreetmap.org/wiki/Key:barrier,2025-04-15,17,2137,443,173,207.98,https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/2014_Bystrzyca_K%C5%82odzka%2C_mury_obronne_05.jpg/200px-2014_Bystrzyca_K%C5%82odzka%2C_mury_obronne_05.jpg
|
||||
barrier,fr,https://wiki.openstreetmap.org/wiki/FR:Key:barrier,2022-08-16,15,542,103,18,207.98,https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/2014_Bystrzyca_K%C5%82odzka%2C_mury_obronne_05.jpg/200px-2014_Bystrzyca_K%C5%82odzka%2C_mury_obronne_05.jpg
|
||||
source:date,en,https://wiki.openstreetmap.org/wiki/Key:source:date,2023-04-01,11,395,75,10,22.47,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
source:date,fr,https://wiki.openstreetmap.org/wiki/FR:Key:source:date,2023-07-21,10,419,75,11,22.47,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
service,en,https://wiki.openstreetmap.org/wiki/Key:service,2025-03-16,22,1436,218,17,83.79,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
service,fr,https://wiki.openstreetmap.org/wiki/FR:Key:service,2024-03-04,11,443,100,10,83.79,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
addr:state,en,https://wiki.openstreetmap.org/wiki/Key:addr:state,2023-06-23,12,289,74,11,100,https://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/WVaCent.jpg/200px-WVaCent.jpg
|
||||
access,en,https://wiki.openstreetmap.org/wiki/Key:access,2025-08-06,31,5803,708,98,66.75,https://wiki.openstreetmap.org/w/images/5/5e/WhichAccess.png
|
||||
access,fr,https://wiki.openstreetmap.org/wiki/FR:Key:access,2024-11-27,33,3200,506,83,66.75,https://wiki.openstreetmap.org/w/images/5/5e/WhichAccess.png
|
||||
oneway,en,https://wiki.openstreetmap.org/wiki/Key:oneway,2025-07-17,28,2318,290,30,19.4,https://upload.wikimedia.org/wikipedia/commons/thumb/1/13/One_way_sign.JPG/200px-One_way_sign.JPG
|
||||
oneway,fr,https://wiki.openstreetmap.org/wiki/FR:Key:oneway,2025-06-16,14,645,108,14,19.4,https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/France_road_sign_C12.svg/200px-France_road_sign_C12.svg.png
|
||||
height,en,https://wiki.openstreetmap.org/wiki/Key:height,2025-07-21,24,1184,184,20,8.45,https://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Height_demonstration_diagram.png/200px-Height_demonstration_diagram.png
|
||||
height,fr,https://wiki.openstreetmap.org/wiki/FR:Key:height,2025-06-14,21,1285,190,21,8.45,https://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Height_demonstration_diagram.png/200px-Height_demonstration_diagram.png
|
||||
ref,en,https://wiki.openstreetmap.org/wiki/Key:ref,2025-07-25,26,4404,782,115,11.79,https://upload.wikimedia.org/wikipedia/commons/thumb/3/3d/UK_traffic_sign_2901.svg/200px-UK_traffic_sign_2901.svg.png
|
||||
ref,fr,https://wiki.openstreetmap.org/wiki/FR:Key:ref,2025-07-30,20,3393,460,12,11.79,https://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Autoroute_fran%C3%A7aise_1.svg/200px-Autoroute_fran%C3%A7aise_1.svg.png
|
||||
maxspeed,en,https://wiki.openstreetmap.org/wiki/Key:maxspeed,2025-08-20,30,4275,404,38,39.24,https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Zeichen_274-60_-_Zul%C3%A4ssige_H%C3%B6chstgeschwindigkeit%2C_StVO_2017.svg/200px-Zeichen_274-60_-_Zul%C3%A4ssige_H%C3%B6chstgeschwindigkeit%2C_StVO_2017.svg.png
|
||||
maxspeed,fr,https://wiki.openstreetmap.org/wiki/FR:Key:maxspeed,2025-05-10,25,1401,156,23,39.24,https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Zeichen_274-60_-_Zul%C3%A4ssige_H%C3%B6chstgeschwindigkeit%2C_StVO_2017.svg/200px-Zeichen_274-60_-_Zul%C3%A4ssige_H%C3%B6chstgeschwindigkeit%2C_StVO_2017.svg.png
|
||||
lanes,en,https://wiki.openstreetmap.org/wiki/Key:lanes,2025-08-21,26,2869,355,48,117.16,https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/A55_trunk_road_looking_east_-_geograph.org.uk_-_932668.jpg/200px-A55_trunk_road_looking_east_-_geograph.org.uk_-_932668.jpg
|
||||
lanes,fr,https://wiki.openstreetmap.org/wiki/FR:Key:lanes,2024-03-07,19,1492,167,19,117.16,https://wiki.openstreetmap.org/w/images/thumb/d/d4/Dscf0444_600.jpg/200px-Dscf0444_600.jpg
|
||||
start_date,en,https://wiki.openstreetmap.org/wiki/Key:start_date,2025-08-01,22,1098,168,29,214.58,https://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Connel_bridge_plate.jpg/200px-Connel_bridge_plate.jpg
|
||||
start_date,fr,https://wiki.openstreetmap.org/wiki/FR:Key:start_date,2022-08-29,19,1097,133,22,214.58,https://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/Connel_bridge_plate.jpg/200px-Connel_bridge_plate.jpg
|
||||
addr:district,en,https://wiki.openstreetmap.org/wiki/Key:addr:district,2023-11-06,11,244,76,11,139.96,https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Hangal_Taluk.jpg/200px-Hangal_Taluk.jpg
|
||||
addr:district,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:district,2025-08-23,15,1653,150,77,139.96,https://wiki.openstreetmap.org/w/images/thumb/e/e9/Housenumber-karlsruhe-de.png/200px-Housenumber-karlsruhe-de.png
|
||||
layer,en,https://wiki.openstreetmap.org/wiki/Key:layer,2025-01-02,16,1967,181,17,65.95,https://wiki.openstreetmap.org/w/images/thumb/2/26/Washington_layers.png/200px-Washington_layers.png
|
||||
layer,fr,https://wiki.openstreetmap.org/wiki/FR:Key:layer,2024-02-16,15,2231,162,17,65.95,https://wiki.openstreetmap.org/w/images/thumb/2/26/Washington_layers.png/200px-Washington_layers.png
|
||||
type,en,https://wiki.openstreetmap.org/wiki/Key:type,2025-05-13,20,911,200,72,334.06,https://wiki.openstreetmap.org/w/images/thumb/5/58/Osm_element_node_no.svg/30px-Osm_element_node_no.svg.png
|
||||
type,fr,https://wiki.openstreetmap.org/wiki/FR:Key:type,2020-11-13,10,444,78,10,334.06,https://wiki.openstreetmap.org/w/images/thumb/5/58/Osm_element_node_no.svg/30px-Osm_element_node_no.svg.png
|
||||
operator,en,https://wiki.openstreetmap.org/wiki/Key:operator,2025-08-26,24,1908,241,37,223.28,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
operator,fr,https://wiki.openstreetmap.org/wiki/FR:Key:operator,2022-09-30,15,418,89,11,223.28,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
lit,en,https://wiki.openstreetmap.org/wiki/Key:lit,2024-07-20,17,931,174,52,38.88,https://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Peatonal_Bicentenario.JPG/200px-Peatonal_Bicentenario.JPG
|
||||
lit,fr,https://wiki.openstreetmap.org/wiki/FR:Key:lit,2025-01-19,17,628,123,14,38.88,https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/2014_K%C5%82odzko%2C_ul._Grottgera_14.JPG/200px-2014_K%C5%82odzko%2C_ul._Grottgera_14.JPG
|
||||
wall,en,https://wiki.openstreetmap.org/wiki/Key:wall,2024-05-02,14,682,206,61,100,https://wiki.openstreetmap.org/w/images/thumb/5/58/Osm_element_node_no.svg/30px-Osm_element_node_no.svg.png
|
||||
tiger:cfcc,en,https://wiki.openstreetmap.org/wiki/Key:tiger:cfcc,2022-12-09,10,127,24,7,100,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
crossing,en,https://wiki.openstreetmap.org/wiki/Key:crossing,2024-02-18,25,2678,363,34,76.98,https://wiki.openstreetmap.org/w/images/thumb/7/75/Toucan.jpg/200px-Toucan.jpg
|
||||
crossing,fr,https://wiki.openstreetmap.org/wiki/FR:Key:crossing,2025-01-20,15,1390,254,28,76.98,https://wiki.openstreetmap.org/w/images/thumb/7/75/Toucan.jpg/200px-Toucan.jpg
|
||||
tiger:county,en,https://wiki.openstreetmap.org/wiki/Key:tiger:county,2022-12-09,10,127,24,7,100,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
source:addr,en,https://wiki.openstreetmap.org/wiki/Key:source:addr,2023-07-05,9,200,70,10,100,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
footway,en,https://wiki.openstreetmap.org/wiki/Key:footway,2025-08-20,23,2002,369,39,99.66,https://wiki.openstreetmap.org/w/images/thumb/b/b9/Sidewalk_and_zebra-crossing.jpg/200px-Sidewalk_and_zebra-crossing.jpg
|
||||
footway,fr,https://wiki.openstreetmap.org/wiki/FR:Key:footway,2024-06-04,14,685,147,28,99.66,https://wiki.openstreetmap.org/w/images/thumb/b/b9/Sidewalk_and_zebra-crossing.jpg/200px-Sidewalk_and_zebra-crossing.jpg
|
||||
ref:bag,en,https://wiki.openstreetmap.org/wiki/Key:ref:bag,2024-10-09,10,254,69,11,100,https://wiki.openstreetmap.org/w/images/thumb/5/58/Osm_element_node_no.svg/30px-Osm_element_node_no.svg.png
|
||||
addr:place,en,https://wiki.openstreetmap.org/wiki/Key:addr:place,2025-03-28,16,1204,154,13,136.57,https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Suburb_of_Phillip.jpg/200px-Suburb_of_Phillip.jpg
|
||||
addr:place,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:place,2023-06-17,11,276,75,12,136.57,https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/Suburb_of_Phillip.jpg/200px-Suburb_of_Phillip.jpg
|
||||
tiger:reviewed,en,https://wiki.openstreetmap.org/wiki/Key:tiger:reviewed,2025-08-01,16,734,105,11,100,https://upload.wikimedia.org/wikipedia/commons/thumb/e/e4/US-Census-TIGERLogo.svg/200px-US-Census-TIGERLogo.svg.png
|
||||
leisure,en,https://wiki.openstreetmap.org/wiki/Key:leisure,2025-02-28,12,1084,374,180,232.43,https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Hammock_-_Polynesia.jpg/200px-Hammock_-_Polynesia.jpg
|
||||
leisure,fr,https://wiki.openstreetmap.org/wiki/FR:Key:leisure,2021-12-29,11,951,360,186,232.43,https://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Hammock_-_Polynesia.jpg/200px-Hammock_-_Polynesia.jpg
|
||||
addr:suburb,en,https://wiki.openstreetmap.org/wiki/Key:addr:suburb,2024-02-24,14,439,89,11,1.49,https://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/Grosvenor_Place_2_2008_06_19.jpg/200px-Grosvenor_Place_2_2008_06_19.jpg
|
||||
addr:suburb,fr,https://wiki.openstreetmap.org/wiki/FR:Key:addr:suburb,2024-02-18,13,418,87,11,1.49,https://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/Grosvenor_Place_2_2008_06_19.jpg/200px-Grosvenor_Place_2_2008_06_19.jpg
|
||||
ele,en,https://wiki.openstreetmap.org/wiki/Key:ele,2025-07-18,18,1846,165,24,104.45,https://wiki.openstreetmap.org/w/images/a/a3/Key-ele_mapnik.png
|
||||
ele,fr,https://wiki.openstreetmap.org/wiki/FR:Key:ele,2024-03-02,15,1277,128,13,104.45,https://wiki.openstreetmap.org/w/images/a/a3/Key-ele_mapnik.png
|
||||
tracktype,en,https://wiki.openstreetmap.org/wiki/Key:tracktype,2024-12-02,16,652,146,35,32.71,https://wiki.openstreetmap.org/w/images/thumb/1/13/Tracktype-collage.jpg/200px-Tracktype-collage.jpg
|
||||
tracktype,fr,https://wiki.openstreetmap.org/wiki/FR:Key:tracktype,2025-05-03,11,463,105,29,32.71,https://wiki.openstreetmap.org/w/images/thumb/1/13/Tracktype-collage.jpg/200px-Tracktype-collage.jpg
|
||||
addr:neighbourhood,en,https://wiki.openstreetmap.org/wiki/Key:addr:neighbourhood,2025-04-29,24,2020,235,83,100,https://wiki.openstreetmap.org/w/images/thumb/e/e9/Housenumber-karlsruhe-de.png/200px-Housenumber-karlsruhe-de.png
|
||||
addr:hamlet,en,https://wiki.openstreetmap.org/wiki/Key:addr:hamlet,2024-12-05,9,142,64,11,100,https://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/Grosvenor_Place_2_2008_06_19.jpg/200px-Grosvenor_Place_2_2008_06_19.jpg
|
||||
addr:province,en,https://wiki.openstreetmap.org/wiki/Key:addr:province,2022-05-04,9,156,64,11,100,https://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Stamp_of_Indonesia_-_2002_-_Colnect_265917_-_Aceh_Province.jpeg/200px-Stamp_of_Indonesia_-_2002_-_Colnect_265917_-_Aceh_Province.jpeg
|
||||
leaf_type,en,https://wiki.openstreetmap.org/wiki/Key:leaf_type,2025-01-22,15,739,201,57,114.46,https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Picea_abies_Nadelkissen.jpg/200px-Picea_abies_Nadelkissen.jpg
|
||||
leaf_type,fr,https://wiki.openstreetmap.org/wiki/FR:Key:leaf_type,2023-07-02,14,734,220,64,114.46,https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Picea_abies_Nadelkissen.jpg/200px-Picea_abies_Nadelkissen.jpg
|
||||
addr:full,en,https://wiki.openstreetmap.org/wiki/Key:addr:full,2025-04-29,24,2020,235,83,100,https://wiki.openstreetmap.org/w/images/thumb/e/e9/Housenumber-karlsruhe-de.png/200px-Housenumber-karlsruhe-de.png
|
||||
Anatomie_des_étiquettes_osm,en,https://wiki.openstreetmap.org/wiki/Anatomie_des_étiquettes_osm,2025-06-08,22,963,53,0,100,
|
||||
Anatomie_des_étiquettes_osm,en,https://wiki.openstreetmap.org/wiki/Anatomie_des_étiquettes_osm,2025-06-08,22,0,0,0,100,
|
||||
Tag:leisure=children_club,en,https://wiki.openstreetmap.org/wiki/Tag:leisure=children_club,2025-02-02,9,163,69,9,56.04,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
Tag:leisure=children_club,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:leisure=children_club,2024-05-02,8,294,67,10,56.04,https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Dave_%26_Buster%27s_video_arcade_in_Columbus%2C_OH_-_17910.JPG/200px-Dave_%26_Buster%27s_video_arcade_in_Columbus%2C_OH_-_17910.JPG
|
||||
Tag:harassment_prevention=ask_angela,en,https://wiki.openstreetmap.org/wiki/Tag:harassment_prevention=ask_angela,2025-02-22,14,463,72,9,42.56,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
Tag:harassment_prevention=ask_angela,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:harassment_prevention=ask_angela,2025-09-01,20,873,166,15,42.56,https://wiki.openstreetmap.org/w/images/thumb/1/15/2024-06-27T08.40.50_ask_angela_lyon.jpg/200px-2024-06-27T08.40.50_ask_angela_lyon.jpg
|
||||
Key:harassment_prevention,en,https://wiki.openstreetmap.org/wiki/Key:harassment_prevention,2024-08-10,12,196,69,14,66.72,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
Key:harassment_prevention,fr,https://wiki.openstreetmap.org/wiki/FR:Key:harassment_prevention,2025-07-03,15,328,83,14,66.72,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
Proposal process,en,https://wiki.openstreetmap.org/wiki/Proposal process,2025-08-13,46,5292,202,4,166.25,https://wiki.openstreetmap.org/w/images/thumb/c/c2/Save_proposal_first.png/761px-Save_proposal_first.png
|
||||
Proposal process,fr,https://wiki.openstreetmap.org/wiki/FR:Proposal process,2023-09-22,15,1146,24,0,166.25,
|
||||
Automated_Edits_code_of_conduct,en,https://wiki.openstreetmap.org/wiki/Automated_Edits_code_of_conduct,2025-07-26,19,2062,69,0,26.35,
|
||||
Automated_Edits_code_of_conduct,fr,https://wiki.openstreetmap.org/wiki/FR:Automated_Edits_code_of_conduct,2025-04-03,17,1571,16,0,26.35,
|
||||
Proposal process,en,https://wiki.openstreetmap.org/wiki/Proposal process,2025-08-13,46,5292,202,4,172.34,https://wiki.openstreetmap.org/w/images/thumb/c/c2/Save_proposal_first.png/761px-Save_proposal_first.png
|
||||
Proposal process,fr,https://wiki.openstreetmap.org/wiki/FR:Proposal process,2023-09-22,15,0,0,0,172.34,
|
||||
Automated_Edits_code_of_conduct,en,https://wiki.openstreetmap.org/wiki/Automated_Edits_code_of_conduct,2025-07-26,19,0,0,0,23.1,
|
||||
Automated_Edits_code_of_conduct,fr,https://wiki.openstreetmap.org/wiki/FR:Automated_Edits_code_of_conduct,2025-04-03,17,0,0,0,23.1,
|
||||
Key:cuisine,en,https://wiki.openstreetmap.org/wiki/Key:cuisine,2025-07-23,17,3422,693,303,107.73,https://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Food_montage.jpg/200px-Food_montage.jpg
|
||||
Key:cuisine,fr,https://wiki.openstreetmap.org/wiki/FR:Key:cuisine,2024-02-16,15,2866,690,316,107.73,https://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Food_montage.jpg/200px-Food_montage.jpg
|
||||
Libre_Charge_Map,en,https://wiki.openstreetmap.org/wiki/Libre_Charge_Map,2025-07-28,11,328,10,2,100,https://wiki.openstreetmap.org/w/images/thumb/8/8e/Screenshot_2025-07-28_at_14-40-11_LibreChargeMap_-_OSM_Bliss.png/300px-Screenshot_2025-07-28_at_14-40-11_LibreChargeMap_-_OSM_Bliss.png
|
||||
OSM_Mon_Commerce,en,https://wiki.openstreetmap.org/wiki/OSM_Mon_Commerce,2025-07-29,17,418,34,3,100,https://wiki.openstreetmap.org/w/images/thumb/6/67/Villes_OSM_Mon_Commerce.png/500px-Villes_OSM_Mon_Commerce.png
|
||||
Libre_Charge_Map,en,https://wiki.openstreetmap.org/wiki/Libre_Charge_Map,2025-09-03,11,328,10,2,1.34,https://wiki.openstreetmap.org/w/images/thumb/8/8e/Screenshot_2025-07-28_at_14-40-11_LibreChargeMap_-_OSM_Bliss.png/300px-Screenshot_2025-07-28_at_14-40-11_LibreChargeMap_-_OSM_Bliss.png
|
||||
Libre_Charge_Map,fr,https://wiki.openstreetmap.org/wiki/FR:Libre_Charge_Map,2025-09-03,12,101,14,2,1.34,https://wiki.openstreetmap.org/w/images/thumb/8/8e/Screenshot_2025-07-28_at_14-40-11_LibreChargeMap_-_OSM_Bliss.png/300px-Screenshot_2025-07-28_at_14-40-11_LibreChargeMap_-_OSM_Bliss.png
|
||||
OSM_Mon_Commerce,en,https://wiki.openstreetmap.org/wiki/OSM_Mon_Commerce,2025-07-29,17,418,34,3,8.85,https://wiki.openstreetmap.org/w/images/thumb/6/67/Villes_OSM_Mon_Commerce.png/500px-Villes_OSM_Mon_Commerce.png
|
||||
OSM_Mon_Commerce,fr,https://wiki.openstreetmap.org/wiki/FR:OSM_Mon_Commerce,2025-09-03,13,256,18,3,8.85,https://wiki.openstreetmap.org/w/images/thumb/6/67/Villes_OSM_Mon_Commerce.png/500px-Villes_OSM_Mon_Commerce.png
|
||||
Complète_Tes_Commerces,en,https://wiki.openstreetmap.org/wiki/Complète_Tes_Commerces,2025-08-03,9,0,0,0,5.35,
|
||||
Complète_Tes_Commerces,fr,https://wiki.openstreetmap.org/wiki/FR:Complète_Tes_Commerces,2025-08-26,14,0,0,0,5.35,
|
||||
Tag:amenity=charging_station,en,https://wiki.openstreetmap.org/wiki/Tag:amenity=charging_station,2025-08-29,16,1509,284,62,55.72,https://wiki.openstreetmap.org/w/images/thumb/4/4d/Recharge_Vigra_charging_station.jpg/200px-Recharge_Vigra_charging_station.jpg
|
||||
Tag:amenity=charging_station,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:amenity=charging_station,2024-12-28,19,2662,331,58,55.72,https://wiki.openstreetmap.org/w/images/thumb/4/4d/Recharge_Vigra_charging_station.jpg/200px-Recharge_Vigra_charging_station.jpg
|
||||
Organised_Editing/Activities/MapYourGrid_Initiative,en,https://wiki.openstreetmap.org/wiki/Organised_Editing/Activities/MapYourGrid_Initiative,2025-09-03,33,1872,122,2,100,https://wiki.openstreetmap.org/w/images/thumb/f/f9/Mapyourgrid-logo.png/350px-Mapyourgrid-logo.png
|
||||
Key:highway,en,https://wiki.openstreetmap.org/wiki/Key:highway,2025-04-10,30,4126,780,314,20.35,https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Roads_in_Switzerland_%2827965437018%29.jpg/200px-Roads_in_Switzerland_%2827965437018%29.jpg
|
||||
Key:highway,fr,https://wiki.openstreetmap.org/wiki/FR:Key:highway,2025-01-05,30,4141,695,313,20.35,https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Roads_in_Switzerland_%2827965437018%29.jpg/200px-Roads_in_Switzerland_%2827965437018%29.jpg
|
||||
Quality_assurance,en,https://wiki.openstreetmap.org/wiki/Quality_assurance,2025-06-01,19,0,0,0,15.6,
|
||||
Quality_assurance,fr,https://wiki.openstreetmap.org/wiki/FR:Quality_assurance,2025-08-18,19,0,0,0,15.6,
|
||||
Verifiability,en,https://wiki.openstreetmap.org/wiki/Verifiability,2024-11-28,22,1440,59,1,102.48,https://wiki.openstreetmap.org/w/images/thumb/7/7d/Vernier_calipers.svg/160px-Vernier_calipers.svg.png
|
||||
Verifiability,fr,https://wiki.openstreetmap.org/wiki/FR:Verifiability,2023-07-29,13,842,23,1,102.48,https://wiki.openstreetmap.org/w/images/thumb/7/7d/Vernier_calipers.svg/160px-Vernier_calipers.svg.png
|
||||
Good_practice,en,https://wiki.openstreetmap.org/wiki/Good_practice,2025-07-18,34,2611,122,2,73.08,https://wiki.openstreetmap.org/w/images/thumb/8/84/Tracks_with_descriptive_name_tags.png/300px-Tracks_with_descriptive_name_tags.png
|
||||
Good_practice,fr,https://wiki.openstreetmap.org/wiki/FR:Good_practice,2024-07-26,33,2791,80,1,73.08,https://wiki.openstreetmap.org/w/images/thumb/8/84/Tracks_with_descriptive_name_tags.png/300px-Tracks_with_descriptive_name_tags.png
|
||||
Mapping_parties,en,https://wiki.openstreetmap.org/wiki/Mapping_parties,2023-11-12,10,512,18,3,290.75,https://wiki.openstreetmap.org/w/images/thumb/c/c3/Mappers-learning-to-gps.jpg/300px-Mappers-learning-to-gps.jpg
|
||||
Mapping_parties,fr,https://wiki.openstreetmap.org/wiki/FR:Mapping_parties,2019-11-23,9,622,15,2,290.75,https://wiki.openstreetmap.org/w/images/thumb/c/c3/Mappers-learning-to-gps.jpg/300px-Mappers-learning-to-gps.jpg
|
||||
State_of_the_Map,en,https://wiki.openstreetmap.org/wiki/State_of_the_Map,2025-08-22,45,2975,577,120,100,https://wiki.openstreetmap.org/w/images/thumb/a/af/Sotm_2025_coloured.png/120px-Sotm_2025_coloured.png
|
||||
Diversity,en,https://wiki.openstreetmap.org/wiki/Diversity,2024-09-27,25,0,0,0,41.3,
|
||||
Diversity,fr,https://wiki.openstreetmap.org/wiki/FR:Diversity,2025-04-20,27,0,0,0,41.3,
|
||||
Mapping_private_information,en,https://wiki.openstreetmap.org/wiki/Mapping_private_information,2025-07-21,18,0,0,0,100,
|
||||
Any_tags_you_like,en,https://wiki.openstreetmap.org/wiki/Any_tags_you_like,2025-05-14,21,0,0,0,307.45,
|
||||
Any_tags_you_like,fr,https://wiki.openstreetmap.org/wiki/FR:Any_tags_you_like,2021-03-01,18,0,0,0,307.45,
|
||||
Organised_Editing/Best_Practices,en,https://wiki.openstreetmap.org/wiki/Organised_Editing/Best_Practices,2025-07-18,16,501,10,1,100,https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Ambox_warning_pn.svg/40px-Ambox_warning_pn.svg.png
|
||||
Map_features,en,https://wiki.openstreetmap.org/wiki/Map_features,2025-07-21,125,21926,4255,2222,507.98,https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Bar_MXCT.JPG/100px-Bar_MXCT.JPG
|
||||
Map_features,fr,https://wiki.openstreetmap.org/wiki/FR:Map_features,2018-12-27,103,23159,5516,3062,507.98,https://wiki.openstreetmap.org/w/images/c/c4/Aerialway_gondola_render.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Quality_Assurance,fr,https://wiki.openstreetmap.org/wiki/FR:Quality_Assurance,2015-05-16,16,0,0,0,0,
|
||||
https://wiki.openstreetmap.org/wiki/Quality_Assurance,en,https://wiki.openstreetmap.org/wiki/Quality_Assurance,2025-06-01,19,0,0,0,100,
|
||||
https://wiki.openstreetmap.org/wiki/FR:Nominatim/Installation,fr,https://wiki.openstreetmap.org/wiki/FR:Nominatim/Installation,2016-08-22,32,0,0,0,0,
|
||||
https://wiki.openstreetmap.org/wiki/FR:Maxheight_Map,fr,https://wiki.openstreetmap.org/wiki/FR:Maxheight_Map,2017-12-11,27,1090,74,10,0,https://wiki.openstreetmap.org/w/images/thumb/c/c7/Maxheight_Map.png/400px-Maxheight_Map.png
|
||||
https://wiki.openstreetmap.org/wiki/Maxheight_Map,en,https://wiki.openstreetmap.org/wiki/Maxheight_Map,2025-08-31,34,2323,95,16,100,https://wiki.openstreetmap.org/w/images/thumb/d/d7/Maxheight_map_complex.png/200px-Maxheight_map_complex.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Enregistrement_de_traces_GPS,fr,https://wiki.openstreetmap.org/wiki/FR:Enregistrement_de_traces_GPS,2018-03-20,17,1040,45,2,0,https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/GPS_Satellite_NASA_art-iif.jpg/120px-GPS_Satellite_NASA_art-iif.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Conversion_des_traces_GPS,fr,https://wiki.openstreetmap.org/wiki/FR:Conversion_des_traces_GPS,2018-03-27,11,536,29,2,0,https://upload.wikimedia.org/wikipedia/commons/thumb/8/8d/GPS_Satellite_NASA_art-iif.jpg/120px-GPS_Satellite_NASA_art-iif.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:%C3%89l%C3%A9ments_cartographiques,fr,https://wiki.openstreetmap.org/wiki/FR:%C3%89l%C3%A9ments_cartographiques,2018-12-27,103,23159,5516,3062,0,https://wiki.openstreetmap.org/w/images/c/c4/Aerialway_gondola_render.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Relation:bridge,fr,https://wiki.openstreetmap.org/wiki/FR:Relation:bridge,2019-02-22,8,190,68,10,0,https://wiki.openstreetmap.org/w/images/thumb/9/9a/Mapping-Features-Road-Bridge.png/200px-Mapping-Features-Road-Bridge.png
|
||||
https://wiki.openstreetmap.org/wiki/Relation:bridge,en,https://wiki.openstreetmap.org/wiki/Relation:bridge,2024-05-28,11,426,92,15,100,https://wiki.openstreetmap.org/w/images/thumb/9/9a/Mapping-Features-Road-Bridge.png/200px-Mapping-Features-Road-Bridge.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Xapi,fr,https://wiki.openstreetmap.org/wiki/FR:Xapi,2020-04-09,32,2837,58,3,0,https://wiki.openstreetmap.org/w/images/c/c9/Logo.png
|
||||
https://wiki.openstreetmap.org/wiki/Xapi,en,https://wiki.openstreetmap.org/wiki/Xapi,2020-04-09,42,2760,73,2,100,https://wiki.openstreetmap.org/w/images/c/c9/Logo.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Key:min_age,fr,https://wiki.openstreetmap.org/wiki/FR:Key:min_age,2020-09-23,10,248,73,12,0,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/Key:min_age,en,https://wiki.openstreetmap.org/wiki/Key:min_age,2023-06-01,15,539,126,18,100,https://wiki.openstreetmap.org/w/images/thumb/7/76/Osm_element_node.svg/30px-Osm_element_node.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Google_Maps_user_contributions,fr,https://wiki.openstreetmap.org/wiki/FR:Google_Maps_user_contributions,2020-10-01,16,2029,17,3,0,https://wiki.openstreetmap.org/w/images/thumb/7/7b/Simple_sad_face.svg/100px-Simple_sad_face.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/Google_Maps_user_contributions,en,https://wiki.openstreetmap.org/wiki/Google_Maps_user_contributions,2025-03-13,15,766,28,2,100,https://wiki.openstreetmap.org/w/images/thumb/7/7b/Simple_sad_face.svg/100px-Simple_sad_face.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Quality_Assurance_Tools_script,fr,https://wiki.openstreetmap.org/wiki/FR:Quality_Assurance_Tools_script,2021-01-17,18,701,50,15,0,https://wiki.openstreetmap.org/w/images/e/e0/Qat_script_logo.png
|
||||
https://wiki.openstreetmap.org/wiki/Quality_Assurance_Tools_script,en,https://wiki.openstreetmap.org/wiki/Quality_Assurance_Tools_script,2020-07-24,21,1172,59,15,100,https://wiki.openstreetmap.org/w/images/thumb/f/f9/Qat_script_download_dlg_screenshot_small.png/518px-Qat_script_download_dlg_screenshot_small.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Unconfirmed_user,fr,https://wiki.openstreetmap.org/wiki/FR:Unconfirmed_user,2021-02-07,8,0,0,0,0,
|
||||
https://wiki.openstreetmap.org/wiki/Unconfirmed_user,en,https://wiki.openstreetmap.org/wiki/Unconfirmed_user,2025-04-18,9,0,0,0,100,
|
||||
https://wiki.openstreetmap.org/wiki/FR:Key:generator:method,fr,https://wiki.openstreetmap.org/wiki/FR:Key:generator:method,2023-06-19,9,396,101,13,0,https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Huntly_Power_Station.JPG/200px-Huntly_Power_Station.JPG
|
||||
https://wiki.openstreetmap.org/wiki/Key:generator:method,en,https://wiki.openstreetmap.org/wiki/Key:generator:method,2023-11-26,11,482,151,39,100,https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Huntly_Power_Station.JPG/200px-Huntly_Power_Station.JPG
|
||||
https://wiki.openstreetmap.org/wiki/FR:Import/Guidelines,fr,https://wiki.openstreetmap.org/wiki/FR:Import/Guidelines,2023-07-04,23,0,0,0,0,
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:sport%3Dshooting,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:sport%3Dshooting,2023-07-18,11,393,88,15,0,https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Hattie_Johnson_2.jpg/200px-Hattie_Johnson_2.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:sport%3Dshooting,en,https://wiki.openstreetmap.org/wiki/Tag:sport%3Dshooting,2024-12-02,15,454,123,15,100,https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Hattie_Johnson_2.jpg/200px-Hattie_Johnson_2.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dcombustion,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dcombustion,2023-07-24,10,419,104,13,0,https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Et_baal.jpg/200px-Et_baal.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dcombustion,en,https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dcombustion,2023-11-21,10,203,97,12,100,https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/USMC-090111-M-1394J-003.jpg/200px-USMC-090111-M-1394J-003.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dfission,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dfission,2023-07-24,10,424,105,13,0,https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Nuclear_fission.svg/200px-Nuclear_fission.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dfission,en,https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dfission,2023-11-21,10,156,77,12,100,https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Nuclear_fission.svg/200px-Nuclear_fission.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dfusion,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dfusion,2023-07-24,10,450,107,13,0,https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Deuterium-tritium_fusion.svg/200px-Deuterium-tritium_fusion.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dfusion,en,https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dfusion,2023-11-21,10,203,83,12,100,https://upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Deuterium-tritium_fusion.svg/200px-Deuterium-tritium_fusion.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dgasification,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dgasification,2023-07-24,10,433,103,13,0,https://upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Holzvergaser_G%C3%BCssing.jpg/200px-Holzvergaser_G%C3%BCssing.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dgasification,en,https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dgasification,2023-07-16,12,299,98,13,100,https://upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Holzvergaser_G%C3%BCssing.jpg/200px-Holzvergaser_G%C3%BCssing.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dthermal,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dthermal,2023-07-24,10,447,107,13,0,https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/PS10_solar_power_tower.jpg/200px-PS10_solar_power_tower.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dthermal,en,https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dthermal,2023-11-20,15,377,135,20,100,https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Solar_Plant_kl.jpg/200px-Solar_Plant_kl.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Key:shop,fr,https://wiki.openstreetmap.org/wiki/FR:Key:shop,2023-07-25,33,3285,754,382,0,https://wiki.openstreetmap.org/w/images/thumb/2/26/Geograph_shop.jpg/200px-Geograph_shop.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Key:shop,en,https://wiki.openstreetmap.org/wiki/Key:shop,2025-03-22,31,3638,816,392,100,https://wiki.openstreetmap.org/w/images/thumb/d/dc/North_london_shops.jpg/200px-North_london_shops.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:generator:source%3Dbiomass,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:generator:source%3Dbiomass,2023-07-26,10,278,80,14,0,https://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Biomasse-Heizkraftwerk_Sellessen.jpg/200px-Biomasse-Heizkraftwerk_Sellessen.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:generator:source%3Dbiomass,en,https://wiki.openstreetmap.org/wiki/Tag:generator:source%3Dbiomass,2023-11-22,15,445,117,16,100,https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/2013-05-03_Fotoflug_Leer_Papenburg_DSCF6945.jpg/200px-2013-05-03_Fotoflug_Leer_Papenburg_DSCF6945.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:OpenRailwayMap/API,fr,https://wiki.openstreetmap.org/wiki/FR:OpenRailwayMap/API,2023-10-15,12,0,0,0,0,
|
||||
https://wiki.openstreetmap.org/wiki/API,en,https://wiki.openstreetmap.org/wiki/API,2022-10-05,16,0,0,0,100,
|
||||
https://wiki.openstreetmap.org/wiki/FR:Internationalisation_des_cartes,fr,https://wiki.openstreetmap.org/wiki/FR:Internationalisation_des_cartes,2023-12-06,11,383,24,3,0,https://wiki.openstreetmap.org/w/images/thumb/7/7b/Schermafbeelding_2022-09-28_om_21.02.38.png/300px-Schermafbeelding_2022-09-28_om_21.02.38.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dphotovoltaic,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:generator:method%3Dphotovoltaic,2024-03-02,10,452,107,13,0,https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/Mafate_Marla_solar_panel_dsc00633.jpg/200px-Mafate_Marla_solar_panel_dsc00633.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dphotovoltaic,en,https://wiki.openstreetmap.org/wiki/Tag:generator:method%3Dphotovoltaic,2025-04-22,12,225,95,14,100,https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Giant_photovoltaic_array.jpg/200px-Giant_photovoltaic_array.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Key:distance,fr,https://wiki.openstreetmap.org/wiki/FR:Key:distance,2024-03-28,9,244,68,12,0,https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/M27_DLS.JPG/200px-M27_DLS.JPG
|
||||
https://wiki.openstreetmap.org/wiki/Key:distance,en,https://wiki.openstreetmap.org/wiki/Key:distance,2024-12-29,14,568,86,12,100,https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/M27_DLS.JPG/200px-M27_DLS.JPG
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag_status,fr,https://wiki.openstreetmap.org/wiki/FR:Tag_status,2024-04-02,20,0,0,0,0,
|
||||
https://wiki.openstreetmap.org/wiki/Tag_status,en,https://wiki.openstreetmap.org/wiki/Tag_status,2025-05-17,25,0,0,0,100,
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:shelter_type%3Dbasic_hut,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:shelter_type%3Dbasic_hut,2024-04-10,17,448,122,23,0,https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/BivaccoBertoglioNebbia.jpg/200px-BivaccoBertoglioNebbia.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dbasic_hut,en,https://wiki.openstreetmap.org/wiki/Tag:shelter_type%3Dbasic_hut,2024-11-08,15,441,113,16,100,https://upload.wikimedia.org/wikipedia/commons/thumb/2/22/BivaccoBertoglioNebbia.jpg/200px-BivaccoBertoglioNebbia.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:highway%3Dmotorway_link,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:highway%3Dmotorway_link,2024-07-02,11,804,139,17,0,https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/M40_Motorway%2C_Heading_North._Junction_13_Slip_Road_For_A452_-_geograph.org.uk_-_1282061.jpg/200px-M40_Motorway%2C_Heading_North._Junction_13_Slip_Road_For_A452_-_geograph.org.uk_-_1282061.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:highway%3Dmotorway_link,en,https://wiki.openstreetmap.org/wiki/Tag:highway%3Dmotorway_link,2025-04-10,18,1150,194,16,100,https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/M40_Motorway%2C_Heading_North._Junction_13_Slip_Road_For_A452_-_geograph.org.uk_-_1282061.jpg/200px-M40_Motorway%2C_Heading_North._Junction_13_Slip_Road_For_A452_-_geograph.org.uk_-_1282061.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Relation:enforcement,fr,https://wiki.openstreetmap.org/wiki/FR:Relation:enforcement,2024-07-20,16,1304,128,29,0,https://wiki.openstreetmap.org/w/images/thumb/c/c5/Fixed_speed_camera.svg/200px-Fixed_speed_camera.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/Relation:enforcement,en,https://wiki.openstreetmap.org/wiki/Relation:enforcement,2025-02-09,33,2032,310,65,100,https://wiki.openstreetmap.org/w/images/thumb/c/c5/Fixed_speed_camera.svg/200px-Fixed_speed_camera.svg.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Key:roof:material,fr,https://wiki.openstreetmap.org/wiki/FR:Key:roof:material,2024-08-01,10,597,204,83,0,https://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/Roof-Tile-3149.jpg/200px-Roof-Tile-3149.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Key:roof:material,en,https://wiki.openstreetmap.org/wiki/Key:roof:material,2025-06-21,15,1170,379,175,100,https://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/Roof-Tile-3149.jpg/200px-Roof-Tile-3149.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Key:fuel,fr,https://wiki.openstreetmap.org/wiki/FR:Key:fuel,2024-10-29,9,711,147,15,0,https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/BBQ-Ulverstone-20070420-031.jpg/200px-BBQ-Ulverstone-20070420-031.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Key:fuel,en,https://wiki.openstreetmap.org/wiki/Key:fuel,2025-06-05,10,250,95,12,100,https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/BBQ-Ulverstone-20070420-031.jpg/200px-BBQ-Ulverstone-20070420-031.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:highway%3Dbusway,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:highway%3Dbusway,2024-12-19,13,557,132,18,0,https://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Harmoni_Central_Busway_Transjakarta_2.JPG/200px-Harmoni_Central_Busway_Transjakarta_2.JPG
|
||||
https://wiki.openstreetmap.org/wiki/Tag:highway%3Dbusway,en,https://wiki.openstreetmap.org/wiki/Tag:highway%3Dbusway,2025-09-04,20,1801,257,31,100,https://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Harmoni_Central_Busway_Transjakarta_2.JPG/200px-Harmoni_Central_Busway_Transjakarta_2.JPG
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:railway%3Dtram,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:railway%3Dtram,2024-12-21,11,302,87,15,0,https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Praha%2C_Hloub%C4%9Bt%C3%ADn%2C_Lehovec%2C_tram_KT8D5.JPG/200px-Praha%2C_Hloub%C4%9Bt%C3%ADn%2C_Lehovec%2C_tram_KT8D5.JPG
|
||||
https://wiki.openstreetmap.org/wiki/Tag:railway%3Dtram,en,https://wiki.openstreetmap.org/wiki/Tag:railway%3Dtram,2023-05-24,16,699,181,14,100,https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Praha%2C_Hloub%C4%9Bt%C3%ADn%2C_Lehovec%2C_tram_KT8D5.JPG/200px-Praha%2C_Hloub%C4%9Bt%C3%ADn%2C_Lehovec%2C_tram_KT8D5.JPG
|
||||
https://wiki.openstreetmap.org/wiki/FR:Key:building:material,fr,https://wiki.openstreetmap.org/wiki/FR:Key:building:material,2025-01-05,10,336,90,27,0,https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/M%C3%BCnster%2C_LVM_--_2017_--_6351-7.jpg/200px-M%C3%BCnster%2C_LVM_--_2017_--_6351-7.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Key:building:material,en,https://wiki.openstreetmap.org/wiki/Key:building:material,2025-08-18,15,640,162,68,100,https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/M%C3%BCnster%2C_LVM_--_2017_--_6351-7.jpg/200px-M%C3%BCnster%2C_LVM_--_2017_--_6351-7.jpg
|
||||
https://wiki.openstreetmap.org/wiki/FR:Android,fr,https://wiki.openstreetmap.org/wiki/FR:Android,2025-05-09,36,6795,781,161,0,https://wiki.openstreetmap.org/w/images/thumb/a/a7/Turn-by-turn-bike-navigation.jpg/112px-Turn-by-turn-bike-navigation.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Android,en,https://wiki.openstreetmap.org/wiki/Android,2025-06-16,27,1784,257,24,100,https://wiki.openstreetmap.org/w/images/thumb/e/e2/Vespucci_screenshot.png/112px-Vespucci_screenshot.png
|
||||
https://wiki.openstreetmap.org/wiki/FR:Tag:amenity%3Dloading_dock,fr,https://wiki.openstreetmap.org/wiki/FR:Tag:amenity%3Dloading_dock,2025-08-27,13,425,122,15,0,https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Loading_dock.jpg/200px-Loading_dock.jpg
|
||||
https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dloading_dock,en,https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dloading_dock,2025-07-27,16,776,164,25,100,https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Loading_dock.jpg/200px-Loading_dock.jpg
|
||||
|
|
|
Loading…
Add table
Add a link
Reference in a new issue