First commit
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/www/data/world.pmtiles
|
||||
/nominatim-db/
|
||||
/nominatim-pbf/
|
||||
*.csv
|
||||
10
LICENSE
Normal file
10
LICENSE
Normal file
@@ -0,0 +1,10 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <http://unlicense.org/>
|
||||
5
README.md
Normal file
5
README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
PupMaps by BoopLabs.
|
||||
Project folder for pups.boop.no
|
||||
|
||||
Requires europe-latest.osm.pbf which can be downloaded from https://download.geofabrik.de/europe.html
|
||||
world.pmtiles from https://maps.protomaps.com/builds/
|
||||
30
docker-compose.yml
Normal file
30
docker-compose.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
# Frontend map server
|
||||
mapserver:
|
||||
image: nginx:alpine
|
||||
container_name: pupmap-server
|
||||
volumes:
|
||||
- /mnt/storage/docker-data/pupmap/www:/usr/share/nginx/html:ro
|
||||
# Make sure data folder is inside www/, e.g., www/data/
|
||||
ports:
|
||||
- "8084:80" # Map frontend available on 8084
|
||||
restart: unless-stopped
|
||||
|
||||
# Nominatim search API
|
||||
nominatim:
|
||||
image: mediagis/nominatim:4.4
|
||||
container_name: pupmap-nominatim
|
||||
environment:
|
||||
- PBF_PATH=/nominatim-pbf/europe-latest.osm.pbf
|
||||
- NOMINATIM_IMPORT=1
|
||||
- POSTGRES_SHARED_BUFFERS=2GB
|
||||
- POSTGRES_AUTOVACUUM=on
|
||||
ports:
|
||||
- "7070:8080" # Nominatim API
|
||||
volumes:
|
||||
- /mnt/storage/docker-data/pupmap/nominatim-pbf:/nominatim-pbf:ro # PBF folder (read-only)
|
||||
- /mnt/storage/docker-data/pupmap/nominatim-db:/var/lib/postgresql/14/main # DB folder (empty, host-owned)
|
||||
restart: unless-stopped
|
||||
|
||||
5
scripts/README.md
Normal file
5
scripts/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
Some files are removed due to personal info.
|
||||
|
||||
These files just contain comma separated info, like name,latitude,longitude
|
||||
members.csv
|
||||
places.csv
|
||||
141
scripts/members/data/pois.geojson
Normal file
141
scripts/members/data/pois.geojson
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
10.42,
|
||||
59.21
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"BoltJW"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "BoltJW"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.32,
|
||||
60.39
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"Markos"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "Markos"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.8,
|
||||
58.870000000000005
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupFenling"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupFenling"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
6.97,
|
||||
51.45
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PianoVanBarkhoven"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PianoVanBarkhoven"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
20.98,
|
||||
70.04
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"NordicSub"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "NordicSub"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
11.26,
|
||||
60.33
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupCatalyst"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupCatalyst"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.75,
|
||||
58.86
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupSebbi"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupSebbi"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
10.200000000000001,
|
||||
59.74
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupTiff"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupTiff"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
42
scripts/members/pois-geojson-generate.py
Normal file
42
scripts/members/pois-geojson-generate.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import csv
|
||||
import json
|
||||
from collections import defaultdict
|
||||
|
||||
csv_file = "members.csv"
|
||||
geojson_file = "data/pois.geojson"
|
||||
|
||||
GROUP_TOLERANCE = 0.01 # cluster distance in degrees
|
||||
|
||||
def round_coord(coord):
|
||||
return round(coord / GROUP_TOLERANCE) * GROUP_TOLERANCE
|
||||
|
||||
clusters = defaultdict(list)
|
||||
|
||||
with open(csv_file, newline='', encoding='utf-8') as f:
|
||||
reader = csv.DictReader(f)
|
||||
for row in reader:
|
||||
lat = float(row['latitude'])
|
||||
lon = float(row['longitude'])
|
||||
name = row['name']
|
||||
key = (round_coord(lat), round_coord(lon))
|
||||
clusters[key].append(name)
|
||||
|
||||
features = []
|
||||
for (lat, lon), names in clusters.items():
|
||||
features.append({
|
||||
"type": "Feature",
|
||||
"geometry": { "type": "Point", "coordinates": [lon, lat] },
|
||||
"properties": {
|
||||
"names": names,
|
||||
"count": len(names),
|
||||
"popup": ", ".join(names)
|
||||
}
|
||||
})
|
||||
|
||||
geojson = { "type": "FeatureCollection", "features": features }
|
||||
|
||||
with open(geojson_file, "w", encoding='utf-8') as f:
|
||||
json.dump(geojson, f, indent=2)
|
||||
|
||||
print(f"Generated {geojson_file} with {len(features)} clustered POIs.")
|
||||
|
||||
45
scripts/overlay/cities-geojson-generate.py
Normal file
45
scripts/overlay/cities-geojson-generate.py
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
convert_cities.py
|
||||
BoopLabs Pupmap Europe/Nordics Cities GeoJSON
|
||||
Version: 2025-10-03
|
||||
"""
|
||||
|
||||
import geopandas as gpd
|
||||
|
||||
# ---------- User paths ----------
|
||||
cities_shp = "ne_10m_populated_places.shp"
|
||||
output_dir = "/mnt/storage/docker-data/pupmap/www/data/"
|
||||
|
||||
# ---------- Europe + Nordics ISO3 ----------
|
||||
europe_nordics = [
|
||||
'ALB','AND','AUT','BEL','BIH','BGR','HRV','CYP','CZE','DNK','EST','FIN','FRA','DEU',
|
||||
'GRC','HUN','ISL','IRL','ITA','LVA','LTU','LUX','MLT','MDA','MCO','MNE','NLD','NOR',
|
||||
'POL','PRT','ROU','RUS','SMR','SRB','SVK','SVN','ESP','SWE','CHE','UKR','GBR','VAT'
|
||||
]
|
||||
|
||||
# ---------- Load cities shapefile ----------
|
||||
print("Processing cities...")
|
||||
cities = gpd.read_file(cities_shp)
|
||||
|
||||
# Filter Europe/Nordics
|
||||
if 'ADM0_A3' in cities.columns:
|
||||
cities_filtered = cities[cities['ADM0_A3'].isin(europe_nordics)].copy()
|
||||
else:
|
||||
cities_filtered = cities.copy() # fallback: include all
|
||||
|
||||
# Rename columns to match map expectations
|
||||
cities_filtered = cities_filtered.rename(columns={
|
||||
'NAME': 'name',
|
||||
'ADM0NAME': 'country',
|
||||
'POP_MAX': 'population'
|
||||
})
|
||||
|
||||
# Keep only required columns
|
||||
cities_filtered = cities_filtered[['name','country','population','geometry']]
|
||||
|
||||
# Save to GeoJSON
|
||||
cities_geojson_path = output_dir + "world_cities_europe.geojson"
|
||||
cities_filtered.to_file(cities_geojson_path, driver='GeoJSON')
|
||||
print(f"Saved {cities_geojson_path} ({len(cities_filtered)} features)")
|
||||
|
||||
BIN
scripts/overlay/cities1000.zip
Normal file
BIN
scripts/overlay/cities1000.zip
Normal file
Binary file not shown.
31
scripts/overlay/cities2-geojson-generate.py
Normal file
31
scripts/overlay/cities2-geojson-generate.py
Normal file
@@ -0,0 +1,31 @@
|
||||
import geopandas as gpd
|
||||
|
||||
# --- Input shapefile ---
|
||||
shapefile_path = "ne_10m_populated_places.shp"
|
||||
output_geojson = "world_cities_europe_clean.geojson"
|
||||
|
||||
# --- Load cities shapefile ---
|
||||
cities = gpd.read_file(shapefile_path)
|
||||
|
||||
# --- Filter Europe + Nordics ---
|
||||
europe_iso3 = [
|
||||
'AUT','BEL','CHE','DEU','DNK','ESP','FIN','FRA',
|
||||
'GBR','ITA','NOR','NLD','SWE','ISL','IRL','LUX'
|
||||
]
|
||||
cities = cities[cities['ADM0_A3'].isin(europe_iso3)]
|
||||
|
||||
# --- Ensure columns ---
|
||||
if 'POP_MAX' not in cities.columns:
|
||||
cities['POP_MAX'] = 0
|
||||
else:
|
||||
cities['POP_MAX'] = cities['POP_MAX'].fillna(0).astype(int)
|
||||
|
||||
cities = cities[['NAME','POP_MAX','geometry']]
|
||||
|
||||
# --- Remove empty geometries ---
|
||||
cities = cities[~cities['geometry'].is_empty]
|
||||
|
||||
# --- Save to GeoJSON ---
|
||||
cities.to_file(output_geojson, driver="GeoJSON")
|
||||
print(f"[+] Saved {len(cities)} cities to {output_geojson}")
|
||||
|
||||
72
scripts/overlay/city-road-geojson-generate.py
Normal file
72
scripts/overlay/city-road-geojson-generate.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import geopandas as gpd
|
||||
import os
|
||||
|
||||
# -----------------------------
|
||||
# Settings
|
||||
# -----------------------------
|
||||
output_dir = "/mnt/storage/docker-data/pupmap/www/data/sources/"
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
# Europe + Nordics country codes (for cities)
|
||||
europe_nordics = [
|
||||
'AL','AD','AT','BE','BA','BG','HR','CY','CZ','DK','EE','FI','FR','DE',
|
||||
'GR','HU','IS','IE','IT','LV','LI','LT','LU','MT','MD','MC','ME','NL',
|
||||
'MK','NO','PL','PT','RO','RU','SM','RS','SK','SI','ES','SE','CH','UA','GB'
|
||||
]
|
||||
|
||||
# -----------------------------
|
||||
# Process Cities
|
||||
# -----------------------------
|
||||
print("Processing cities...")
|
||||
cities = gpd.read_file("ne_10m_populated_places/ne_10m_populated_places.shp")
|
||||
cities_filtered = cities[cities['ADM0_A3'].isin(europe_nordics)].copy()
|
||||
|
||||
# Extract coordinates from geometry
|
||||
cities_filtered['lon'] = cities_filtered.geometry.x
|
||||
cities_filtered['lat'] = cities_filtered.geometry.y
|
||||
|
||||
# Keep needed columns + geometry
|
||||
cities_filtered = cities_filtered[['NAME','ADM0NAME','lat','lon','POP_MAX','geometry']]
|
||||
cities_filtered = cities_filtered.rename(columns={
|
||||
'NAME':'name',
|
||||
'ADM0NAME':'country',
|
||||
'POP_MAX':'population'
|
||||
})
|
||||
|
||||
# Drop any duplicate columns
|
||||
cities_filtered = cities_filtered.loc[:, ~cities_filtered.columns.duplicated()]
|
||||
|
||||
cities_geojson_path = os.path.join(output_dir, "world_cities_europe.geojson")
|
||||
cities_filtered.to_file(cities_geojson_path, driver='GeoJSON')
|
||||
print(f"Saved {cities_geojson_path}")
|
||||
|
||||
# -----------------------------
|
||||
# Process Roads
|
||||
# -----------------------------
|
||||
print("Processing roads...")
|
||||
roads = gpd.read_file("ne_10m_roads/ne_10m_roads.shp")
|
||||
|
||||
# Filter by Europe/Nordics bounding box
|
||||
minx, miny, maxx, maxy = -25.0, 34.0, 40.0, 72.0
|
||||
roads_filtered = roads.cx[minx:maxx, miny:maxy].copy()
|
||||
|
||||
# Remove duplicate columns
|
||||
roads_filtered = roads_filtered.loc[:, ~roads_filtered.columns.duplicated()]
|
||||
|
||||
# Pick columns: use FULLNAME/FCLASS if they exist
|
||||
if 'FULLNAME' in roads_filtered.columns and 'FCLASS' in roads_filtered.columns:
|
||||
roads_filtered = roads_filtered[['FULLNAME','FCLASS','geometry']]
|
||||
roads_filtered = roads_filtered.rename(columns={'FULLNAME':'name','FCLASS':'type'})
|
||||
else:
|
||||
# fallback: take first two non-geometry columns
|
||||
geom_col = 'geometry'
|
||||
other_cols = [c for c in roads_filtered.columns if c != geom_col]
|
||||
roads_filtered = roads_filtered[other_cols[:2] + [geom_col]]
|
||||
roads_filtered = roads_filtered.rename(columns={other_cols[0]:'name', other_cols[1]:'type'})
|
||||
|
||||
roads_geojson_path = os.path.join(output_dir, "roads_europe.geojson")
|
||||
roads_filtered.to_file(roads_geojson_path, driver='GeoJSON')
|
||||
print(f"Saved {roads_geojson_path}")
|
||||
|
||||
print("✅ All GeoJSON files are ready for MapLibre!")
|
||||
|
||||
71
scripts/overlay/city-road2-geojson-generate.py
Normal file
71
scripts/overlay/city-road2-geojson-generate.py
Normal file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
geopandasconvert_fixed.py
|
||||
BoopLabs Pupmap Europe/Nordics GeoJSON generator
|
||||
Version: 2025-10-03
|
||||
"""
|
||||
|
||||
import geopandas as gpd
|
||||
|
||||
# ---------- User paths ----------
|
||||
cities_shp = "ne_10m_populated_places.shp"
|
||||
roads_shp = "ne_10m_roads.shp"
|
||||
output_dir = "/mnt/storage/docker-data/pupmap/www/data/sources/"
|
||||
|
||||
# ---------- Europe + Nordics filter ----------
|
||||
europe_nordics = [
|
||||
'ALB','AND','AUT','BEL','BIH','BGR','HRV','CYP','CZE','DNK','EST','FIN','FRA','DEU',
|
||||
'GRC','HUN','ISL','IRL','ITA','LVA','LTU','LUX','MLT','MDA','MCO','MNE','NLD','NOR',
|
||||
'POL','PRT','ROU','RUS','SMR','SRB','SVK','SVN','ESP','SWE','CHE','UKR','GBR','VAT'
|
||||
]
|
||||
|
||||
# ---------- Convert cities ----------
|
||||
print("Processing cities...")
|
||||
|
||||
cities = gpd.read_file(cities_shp)
|
||||
|
||||
# Keep only Europe/Nordics
|
||||
cities_filtered = cities[cities['ADM0_A3'].isin(europe_nordics)].copy()
|
||||
|
||||
# Ensure expected properties exist
|
||||
cities_filtered = cities_filtered.rename(columns={
|
||||
'NAME': 'name',
|
||||
'ADM0NAME': 'country',
|
||||
'POP_MAX': 'population'
|
||||
})
|
||||
|
||||
# Keep only required columns
|
||||
cities_filtered = cities_filtered[['name','country','population','geometry']]
|
||||
|
||||
# Save to GeoJSON
|
||||
cities_geojson_path = output_dir + "world_cities_europe.geojson"
|
||||
cities_filtered.to_file(cities_geojson_path, driver='GeoJSON')
|
||||
print(f"Saved {cities_geojson_path} ({len(cities_filtered)} features)")
|
||||
|
||||
# ---------- Convert roads ----------
|
||||
print("Processing roads...")
|
||||
|
||||
roads = gpd.read_file(roads_shp)
|
||||
|
||||
# Keep only Europe/Nordics
|
||||
roads_filtered = roads[roads['ADM0_A3'].isin(europe_nordics)].copy()
|
||||
|
||||
# Rename the main type column to 'type' (if needed)
|
||||
if 'TYPE' in roads_filtered.columns:
|
||||
roads_filtered = roads_filtered.rename(columns={'TYPE': 'type'})
|
||||
elif 'fclass' in roads_filtered.columns:
|
||||
roads_filtered = roads_filtered.rename(columns={'fclass': 'type'})
|
||||
else:
|
||||
roads_filtered['type'] = 'road' # fallback
|
||||
|
||||
# Keep only necessary columns
|
||||
roads_filtered = roads_filtered[['type','geometry']]
|
||||
|
||||
# Remove duplicate column names (sometimes shapefiles have duplicates)
|
||||
roads_filtered = roads_filtered.loc[:, ~roads_filtered.columns.duplicated()]
|
||||
|
||||
# Save to GeoJSON
|
||||
roads_geojson_path = output_dir + "roads_europe.geojson"
|
||||
roads_filtered.to_file(roads_geojson_path, driver='GeoJSON')
|
||||
print(f"Saved {roads_geojson_path} ({len(roads_filtered)} features)")
|
||||
|
||||
47
scripts/overlay/clean_map_data.py
Normal file
47
scripts/overlay/clean_map_data.py
Normal file
@@ -0,0 +1,47 @@
|
||||
import geopandas as gpd
|
||||
|
||||
# --- 1. Clean Cities ---
|
||||
cities_path = "world_cities_europe.geojson"
|
||||
cities_clean_path = "world_cities_europe_clean.geojson"
|
||||
|
||||
cities = gpd.read_file(cities_path)
|
||||
|
||||
# Ensure POP_MAX exists and numeric
|
||||
if 'POP_MAX' not in cities.columns:
|
||||
cities['POP_MAX'] = 0
|
||||
else:
|
||||
cities['POP_MAX'] = cities['POP_MAX'].fillna(0)
|
||||
cities['POP_MAX'] = cities['POP_MAX'].astype(int)
|
||||
|
||||
# Remove empty geometries
|
||||
cities = cities[~cities['geometry'].is_empty]
|
||||
|
||||
cities.to_file(cities_clean_path, driver="GeoJSON")
|
||||
print(f"[+] Cleaned cities saved to {cities_clean_path}")
|
||||
|
||||
|
||||
# --- 2. Clean Roads ---
|
||||
roads_path = "roads_europe.geojson"
|
||||
roads_clean_path = "roads_europe_clean.geojson"
|
||||
|
||||
roads = gpd.read_file(roads_path)
|
||||
|
||||
# Remove empty geometries
|
||||
roads = roads[~roads['geometry'].is_empty]
|
||||
|
||||
# Add 'type' property based on 'fclass'
|
||||
def classify_road(fclass):
|
||||
if str(fclass).lower() in ['motorway', 'primary']:
|
||||
return 'major'
|
||||
else:
|
||||
return 'minor'
|
||||
|
||||
if 'fclass' in roads.columns:
|
||||
roads['type'] = roads['fclass'].apply(classify_road)
|
||||
else:
|
||||
# If no fclass, mark everything as minor
|
||||
roads['type'] = 'minor'
|
||||
|
||||
roads.to_file(roads_clean_path, driver="GeoJSON")
|
||||
print(f"[+] Cleaned roads saved to {roads_clean_path}")
|
||||
|
||||
BIN
scripts/overlay/ne_10m_populated_places.zip
Normal file
BIN
scripts/overlay/ne_10m_populated_places.zip
Normal file
Binary file not shown.
@@ -0,0 +1,518 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||
|
||||
<head profile="http://gmpg.org/xfn/11">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
|
||||
<title>Natural Earth » Blog Archive » Populated Places - Free vector and raster map data at 1:10m, 1:50m, and 1:110m scales </title>
|
||||
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="alternate" type="application/rss+xml" title="Natural Earth RSS Feed" href="https://www.naturalearthdata.com/feed/" />
|
||||
<link rel="pingback" href="http://www.naturalearthdata.com/xmlrpc.php" />
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/themes/NEV/includes/js/suckerfish.js"></script>
|
||||
<!--[if lt IE 7]>
|
||||
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script>
|
||||
<script defer="defer" type="text/javascript" src="http://www.naturalearthdata.com/wp-content/themes/NEV/includes/js/pngfix.js"></script>
|
||||
<![endif]-->
|
||||
<link rel="stylesheet" href="http://www.naturalearthdata.com/wp-content/themes/NEV/style.css" type="text/css" media="screen" />
|
||||
|
||||
<link rel='dns-prefetch' href='//s.w.org' />
|
||||
<script type="text/javascript">
|
||||
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.0\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/www.naturalearthdata.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.5.9"}};
|
||||
!function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([55357,56424,8205,55356,57212],[55357,56424,8203,55356,57212])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings);
|
||||
</script>
|
||||
<style type="text/css">
|
||||
img.wp-smiley,
|
||||
img.emoji {
|
||||
display: inline !important;
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
height: 1em !important;
|
||||
width: 1em !important;
|
||||
margin: 0 .07em !important;
|
||||
vertical-align: -0.1em !important;
|
||||
background: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
</style>
|
||||
<link rel='stylesheet' id='wp-block-library-css' href='http://www.naturalearthdata.com/wp-includes/css/dist/block-library/style.min.css?ver=5.5.9' type='text/css' media='all' />
|
||||
<link rel='stylesheet' id='bbp-child-bbpress-css' href='http://www.naturalearthdata.com/wp-content/themes/NEV/css/bbpress.css?ver=2.6.6' type='text/css' media='screen' />
|
||||
<link rel="https://api.w.org/" href="https://www.naturalearthdata.com/wp-json/" /><link rel="alternate" type="application/json" href="https://www.naturalearthdata.com/wp-json/wp/v2/posts/472" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.naturalearthdata.com/xmlrpc.php?rsd" />
|
||||
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.naturalearthdata.com/wp-includes/wlwmanifest.xml" />
|
||||
<link rel='prev' title='Antarctic Ice Shelves' href='https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-antarctic-ice-shelves/' />
|
||||
<link rel='next' title='Admin 2 – Counties' href='https://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-admin-2-counties/' />
|
||||
<meta name="generator" content="WordPress 5.5.9" />
|
||||
<link rel="canonical" href="https://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-populated-places/" />
|
||||
<link rel='shortlink' href='https://www.naturalearthdata.com/?p=472' />
|
||||
<link rel="alternate" type="application/json+oembed" href="https://www.naturalearthdata.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.naturalearthdata.com%2Fdownloads%2F10m-cultural-vectors%2F10m-populated-places%2F" />
|
||||
<link rel="alternate" type="text/xml+oembed" href="https://www.naturalearthdata.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.naturalearthdata.com%2Fdownloads%2F10m-cultural-vectors%2F10m-populated-places%2F&format=xml" />
|
||||
|
||||
<script type="text/javascript">
|
||||
/* <![CDATA[ */
|
||||
var ajaxurl = 'https://www.naturalearthdata.com/wp-admin/admin-ajax.php';
|
||||
|
||||
/* ]]> */
|
||||
</script>
|
||||
|
||||
|
||||
<!-- begin gallery scripts -->
|
||||
<link rel="stylesheet" href="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/css/jd.gallery.css.php" type="text/css" media="screen" charset="utf-8"/>
|
||||
<link rel="stylesheet" href="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/css/jd.gallery.css" type="text/css" media="screen" charset="utf-8"/>
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/scripts/mootools.v1.11.js"></script>
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/scripts/jd.gallery.js.php"></script>
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/scripts/jd.gallery.transitions.js"></script>
|
||||
<!-- end gallery scripts -->
|
||||
<link href="http://www.naturalearthdata.com/wp-content/themes/NEV/css/default.css" rel="stylesheet" type="text/css" />
|
||||
<style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style><!--[if lte IE 7]>
|
||||
<link rel="stylesheet" type="text/css" href="http://www.naturalearthdata.com/wp-content/themes/NEV/ie.css" />
|
||||
<![endif]-->
|
||||
<script src="http://www.naturalearthdata.com/wp-content/themes/NEV/js/jquery-1.2.6.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script>
|
||||
jQuery.noConflict();
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(function(){
|
||||
var tabContainers = $('div#maintabdiv > div');
|
||||
tabContainers.hide().filter('#comments').show();
|
||||
|
||||
$('div#maintabdiv ul#tabnav a').click(function () {
|
||||
tabContainers.hide();
|
||||
tabContainers.filter(this.hash).show();
|
||||
$('div#maintabdiv ul#tabnav a').removeClass('current');
|
||||
$(this).addClass('current');
|
||||
return false;
|
||||
}).filter('#comments').click();
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" language="javascript" src="http://www.naturalearthdata.com/dataTables/media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(document).ready(function() {
|
||||
$('#ne_table').dataTable();
|
||||
} );
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerimg">
|
||||
<h1><a href="https://www.naturalearthdata.com/"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/nev_logo.png" alt="Natural Earth title="Natural Earth" /></a></h1>
|
||||
<div class="description">Free vector and raster map data at 1:10m, 1:50m, and 1:110m scales</div>
|
||||
<div class="header_search"><form method="get" id="searchform" action="https://www.naturalearthdata.com/">
|
||||
<label class="hidden" for="s">Search for:</label>
|
||||
<div><input type="text" value="" name="s" id="s" />
|
||||
<input type="submit" id="searchsubmit" value="Search" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!--<div class="translate_panel" style="align:top; margin-left:650px; top:50px;">
|
||||
<div id="google_translate_element" style="float:left;"></div>
|
||||
<script>
|
||||
function googleTranslateElementInit() {
|
||||
new google.translate.TranslateElement({
|
||||
pageLanguage: 'en'
|
||||
}, 'google_translate_element');
|
||||
}
|
||||
</script>
|
||||
<script src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
<div id="pagemenu" style="align:bottom;">
|
||||
<ul id="page-list" class="clearfix"><li class="page_item page-item-4"><a href="https://www.naturalearthdata.com/">Home</a></li>
|
||||
<li class="page_item page-item-10"><a href="https://www.naturalearthdata.com/features/">Features</a></li>
|
||||
<li class="page_item page-item-12 page_item_has_children"><a href="https://www.naturalearthdata.com/downloads/">Downloads</a></li>
|
||||
<li class="page_item page-item-6 current_page_parent"><a href="https://www.naturalearthdata.com/blog/">Blog</a></li>
|
||||
<li class="page_item page-item-5044"><a href="https://www.naturalearthdata.com/issues/">Issues</a></li>
|
||||
<li class="page_item page-item-366"><a href="https://www.naturalearthdata.com/corrections/">Corrections</a></li>
|
||||
<li class="page_item page-item-16 page_item_has_children"><a href="https://www.naturalearthdata.com/about/">About</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<hr /><div id="main">
|
||||
<div id="content" class="narrowcolumn">
|
||||
|
||||
|
||||
<div class="post" id="post-472">
|
||||
<h2>Populated Places</h2>
|
||||
|
||||
<div class="entry">
|
||||
<div class="downloadPromoBlock" style="float: left;">
|
||||
<div style="float: left; width: 170px;"><img loading="lazy" class="alignnone size-full wp-image-1918" title="pop_thumb" src="https://www.naturalearthdata.com/wp-content/uploads/2009/09/pop_thumb.png" alt="pop_thumb" width="150" height="97" /></div>
|
||||
<div style="float: left; width: 410px;"><em>City and town points, from Tokyo to Wasilla, Cairo to Kandahar</em><br />
|
||||
<div class="download-link-div">
|
||||
<a class="download-link" rel="nofollow" title="Downloaded 285695 times (Shapefile, geoDB, or TIFF format)" onclick="if (window.urchinTracker) urchinTracker ('https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip');" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip">Download populated places</a> <span class="download-link-span">(2.68 MB) version 5.1.2</span>
|
||||
</div> <div class="download-link-div">
|
||||
<a class="download-link" rel="nofollow" title="Downloaded 88271 times (Shapefile, geoDB, or TIFF format)" onclick="if (window.urchinTracker) urchinTracker ('https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places_simple.zip');" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places_simple.zip">Download simple (less columns)</a> <span class="download-link-span">(636.84 KB) version 5.1.2</span>
|
||||
</div><br />
|
||||
<span id="more-472"></span></div>
|
||||
</div>
|
||||
<div class="downloadMainBlock" style="float: left;">
|
||||
<p><strong>About</strong></p>
|
||||
<p>Point symbols with name attributes. Includes all admin-0 and many admin-1 capitals, major cities and towns, plus a sampling of smaller towns in sparsely inhabited regions. We favor regional significance over population census in determining our selection of places. Use the scale rankings to filter the number of towns that appear on your map.</p>
|
||||
<p><img loading="lazy" class="alignnone size-full wp-image-1920" title="pop_banner" src="https://www.naturalearthdata.com/wp-content/uploads/2009/09/pop_banner.png" alt="pop_banner" width="580" height="150" srcset="https://www.naturalearthdata.com/wp-content/uploads/2009/09/pop_banner.png 580w, https://www.naturalearthdata.com/wp-content/uploads/2009/09/pop_banner-300x77.png 300w" sizes="(max-width: 580px) 100vw, 580px" /></p>
|
||||
<p><a href="http://www.ornl.gov/sci/landscan/">LandScan</a> derived population estimates are provided for 90% of our cities. Those lacking population estimates are often in sparsely inhabited areas. We provide a range of population values that account for the total “metropolitan” population rather than it’s administrative boundary population. Use the PopMax column to size your town labels. Starting in version 1.1, popMax has been throttled down to the UN estimated metro population for the ~500 largest urban areas in the world. This affects towns in China, India, and parts of Africa where our Landscan counting method usually over estimated.</p>
|
||||
<p>Population estimates were derived from the LANDSCAN dataset maintained and distributed by the Oak Ridge National Laboratory. These data were converted from raster to vector and pixels with fewer than 200 persons per square kilometer were removed from the dataset as they were classified as rural. Once urban pixels were selected, these pixels were aggregated into contiguous units. Concurrently Thiessen polygons were created based on the selected city points. The Thiessen polygons were used to intersect the contiguous city boundaries to produce bounded areas for the cities. As a result, our estimates capture a metropolitan and micropolitan populations per city regardless of administrative units.</p>
|
||||
<p>Once intersected, the contiguous polygons were recalculated, using aerial interpolation assuming uniform population distribution within each pixel, to determine the population total. This process was conducted multiple times, for each scale level, to produce population estimates for each city at nested scales of 1:300 million, 1:110 million, 1:50 million, 1:20 million, and 1:10 million. </p>
|
||||
<div class="download-link-div">
|
||||
<a class="download-link" rel="nofollow" title="Downloaded 6887 times (Shapefile, geoDB, or TIFF format)" onclick="if (window.urchinTracker) urchinTracker ('https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_urban_areas_landscan.zip');" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_urban_areas_landscan.zip">Download landscan urban areas</a> <span class="download-link-span">(13.01 MB) version 4.0.0</span>
|
||||
</div>
|
||||
<p><strong>Population ranks</strong></p>
|
||||
<p>Are calculated as rank_max and rank_min using this general VB formula that can be pasted into ArcMap Field Calculator advanced area (set your output to x):</p>
|
||||
<blockquote><p>
|
||||
a = [pop_max]</p>
|
||||
<p>if( a > 10000000 ) then<br />
|
||||
x = 14<br />
|
||||
elseif( a > 5000000 ) then<br />
|
||||
x = 13<br />
|
||||
elseif( a > 1000000 ) then<br />
|
||||
x = 12<br />
|
||||
elseif( a > 500000 ) then<br />
|
||||
x = 11<br />
|
||||
elseif( a > 200000 ) then<br />
|
||||
x = 10<br />
|
||||
elseif( a > 100000 ) then<br />
|
||||
x = 9<br />
|
||||
elseif( a > 50000 ) then<br />
|
||||
x = 8<br />
|
||||
elseif( a > 20000 ) then<br />
|
||||
x = 7<br />
|
||||
elseif( a > 10000 ) then<br />
|
||||
x = 6<br />
|
||||
elseif( a > 5000 ) then<br />
|
||||
x = 5<br />
|
||||
elseif( a > 2000 ) then<br />
|
||||
x = 4<br />
|
||||
elseif( a > 1000 ) then<br />
|
||||
x = 3<br />
|
||||
elseif( a > 200 ) then<br />
|
||||
x = 2<br />
|
||||
elseif( a > 0 ) then<br />
|
||||
x = 1<br />
|
||||
else<br />
|
||||
x = 0<br />
|
||||
end if</p></blockquote>
|
||||
<p><strong>Issues</strong></p>
|
||||
<p>While we don’t want to show every admin-1 capital, for those countries where we show most admin-1 capitals, we should have a complete set. If you find we are missing one, please log it in the Cx tool at right.</p>
|
||||
<p><strong>Version History</strong></p>
|
||||
<ul>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 5.1.2 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip">5.1.2</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 5.1.0 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip?version=5.1.0">5.1.0</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 5.0.1 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip?version=5.0.1">5.0.1</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 5.0.0 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip?version=5.0.0">5.0.0</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 4.1.0 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip?version=4.1.0">4.1.0</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 4.0.0 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip?version=4.0.0">4.0.0</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 3.3.1 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip?version=3.3.1">3.3.1</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 3.0.0 of ne_10m_populated_places.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip?version=3.0.0">3.0.0</a>
|
||||
</li>
|
||||
<li>
|
||||
2.0.0
|
||||
</li>
|
||||
<li>
|
||||
1.4.0
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p><a href="https://github.com/nvkelso/natural-earth-vector/blob/master/CHANGELOG">The master changelog is available on Github »</a>
|
||||
</div>
|
||||
|
||||
|
||||
<p class="postmetadata2">
|
||||
<small>
|
||||
This entry was posted
|
||||
on Monday, September 14th, 2009 at 2:00 am and is filed under <a href="https://www.naturalearthdata.com/download/downloads/10m-cultural-vectors/" rel="category tag">10m-cultural-vectors</a>.
|
||||
You can follow any responses to this entry through the <a href="https://www.naturalearthdata.com/downloads/10m-cultural-vectors/10m-populated-places/feed/">RSS 2.0</a> feed.
|
||||
|
||||
Both comments and pings are currently closed.
|
||||
|
||||
|
||||
</small>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- You can start editing here. -->
|
||||
|
||||
|
||||
<!-- If comments are closed. -->
|
||||
<p class="nocomments">Comments are closed.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div id="sidebar">
|
||||
<ul>
|
||||
<li id="rssfeeds">Subscribe: <a href="https://www.naturalearthdata.com/feed/">Entries</a> | <a href="https://www.naturalearthdata.com/comments/feed/">Comments</a></li>
|
||||
<li id="search-3" class="widget widget_search"><h2 class="widgettitle">Search</h2>
|
||||
<form method="get" id="searchform" action="https://www.naturalearthdata.com/">
|
||||
<label class="hidden" for="s">Search for:</label>
|
||||
<div><input type="text" value="" name="s" id="s" />
|
||||
<input type="submit" id="searchsubmit" value="Search" />
|
||||
</div>
|
||||
</form>
|
||||
</li>
|
||||
<li id="linkcat-2" class="widget widget_links"><h2 class="widgettitle">Links</h2>
|
||||
|
||||
<ul class='xoxo blogroll'>
|
||||
<li><a href="http://www.nacis.org">NACIS</a></li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li id="tag_cloud-3" class="widget widget_tag_cloud"><h2 class="widgettitle">Tags</h2>
|
||||
<div class="tagcloud"><a href="https://www.naturalearthdata.com/tag/10m/" class="tag-cloud-link tag-link-65 tag-link-position-1" style="font-size: 16.4pt;" aria-label="10m (2 items)">10m</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/50m/" class="tag-cloud-link tag-link-64 tag-link-position-2" style="font-size: 8pt;" aria-label="50m (1 item)">50m</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/90/" class="tag-cloud-link tag-link-61 tag-link-position-3" style="font-size: 8pt;" aria-label="90 (1 item)">90</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/180/" class="tag-cloud-link tag-link-60 tag-link-position-4" style="font-size: 8pt;" aria-label="180 (1 item)">180</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/admin-0/" class="tag-cloud-link tag-link-40 tag-link-position-5" style="font-size: 8pt;" aria-label="admin-0 (1 item)">admin-0</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/bjorn/" class="tag-cloud-link tag-link-46 tag-link-position-6" style="font-size: 8pt;" aria-label="bjorn (1 item)">bjorn</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/bounding-box/" class="tag-cloud-link tag-link-68 tag-link-position-7" style="font-size: 8pt;" aria-label="bounding box (1 item)">bounding box</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/browser/" class="tag-cloud-link tag-link-47 tag-link-position-8" style="font-size: 8pt;" aria-label="browser (1 item)">browser</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/change-log/" class="tag-cloud-link tag-link-74 tag-link-position-9" style="font-size: 8pt;" aria-label="change log (1 item)">change log</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/corrections/" class="tag-cloud-link tag-link-34 tag-link-position-10" style="font-size: 8pt;" aria-label="corrections (1 item)">corrections</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/countries/" class="tag-cloud-link tag-link-41 tag-link-position-11" style="font-size: 8pt;" aria-label="countries (1 item)">countries</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/downloads/" class="tag-cloud-link tag-link-432 tag-link-position-12" style="font-size: 8pt;" aria-label="Downloads (1 item)">Downloads</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/error/" class="tag-cloud-link tag-link-67 tag-link-position-13" style="font-size: 8pt;" aria-label="error (1 item)">error</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/extent/" class="tag-cloud-link tag-link-69 tag-link-position-14" style="font-size: 8pt;" aria-label="extent (1 item)">extent</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/ext-js/" class="tag-cloud-link tag-link-56 tag-link-position-15" style="font-size: 8pt;" aria-label="ext js (1 item)">ext js</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/forums/" class="tag-cloud-link tag-link-35 tag-link-position-16" style="font-size: 8pt;" aria-label="forums (1 item)">forums</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/geoext/" class="tag-cloud-link tag-link-57 tag-link-position-17" style="font-size: 8pt;" aria-label="geoext (1 item)">geoext</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/hans/" class="tag-cloud-link tag-link-63 tag-link-position-18" style="font-size: 8pt;" aria-label="hans (1 item)">hans</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/imagery/" class="tag-cloud-link tag-link-59 tag-link-position-19" style="font-size: 8pt;" aria-label="imagery (1 item)">imagery</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/import/" class="tag-cloud-link tag-link-66 tag-link-position-20" style="font-size: 8pt;" aria-label="import (1 item)">import</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/mapnik/" class="tag-cloud-link tag-link-53 tag-link-position-21" style="font-size: 8pt;" aria-label="mapnik (1 item)">mapnik</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/maptiler/" class="tag-cloud-link tag-link-51 tag-link-position-22" style="font-size: 8pt;" aria-label="maptiler (1 item)">maptiler</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/map-tiles/" class="tag-cloud-link tag-link-49 tag-link-position-23" style="font-size: 8pt;" aria-label="map tiles (1 item)">map tiles</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/marine-boundary/" class="tag-cloud-link tag-link-76 tag-link-position-24" style="font-size: 8pt;" aria-label="marine boundary (1 item)">marine boundary</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/national-parks/" class="tag-cloud-link tag-link-75 tag-link-position-25" style="font-size: 8pt;" aria-label="national parks (1 item)">national parks</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/new-data/" class="tag-cloud-link tag-link-36 tag-link-position-26" style="font-size: 8pt;" aria-label="new data (1 item)">new data</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/nsd/" class="tag-cloud-link tag-link-72 tag-link-position-27" style="font-size: 8pt;" aria-label="nsd (1 item)">nsd</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/openlayers/" class="tag-cloud-link tag-link-55 tag-link-position-28" style="font-size: 8pt;" aria-label="openlayers (1 item)">openlayers</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/physical-labels/" class="tag-cloud-link tag-link-38 tag-link-position-29" style="font-size: 8pt;" aria-label="physical labels (1 item)">physical labels</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/pngng/" class="tag-cloud-link tag-link-52 tag-link-position-30" style="font-size: 8pt;" aria-label="pngng (1 item)">pngng</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/populated-places/" class="tag-cloud-link tag-link-39 tag-link-position-31" style="font-size: 8pt;" aria-label="populated places (1 item)">populated places</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/raster/" class="tag-cloud-link tag-link-58 tag-link-position-32" style="font-size: 16.4pt;" aria-label="raster (2 items)">raster</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/terrestrial-hypsography/" class="tag-cloud-link tag-link-45 tag-link-position-33" style="font-size: 8pt;" aria-label="terrestrial hypsography (1 item)">terrestrial hypsography</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tfw/" class="tag-cloud-link tag-link-62 tag-link-position-34" style="font-size: 8pt;" aria-label="tfw (1 item)">tfw</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/thematic-mapping/" class="tag-cloud-link tag-link-48 tag-link-position-35" style="font-size: 8pt;" aria-label="thematic mapping (1 item)">thematic mapping</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/themese/" class="tag-cloud-link tag-link-37 tag-link-position-36" style="font-size: 8pt;" aria-label="themese (1 item)">themese</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tif/" class="tag-cloud-link tag-link-71 tag-link-position-37" style="font-size: 8pt;" aria-label="tif (1 item)">tif</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tilecache/" class="tag-cloud-link tag-link-54 tag-link-position-38" style="font-size: 8pt;" aria-label="tilecache (1 item)">tilecache</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tiles/" class="tag-cloud-link tag-link-50 tag-link-position-39" style="font-size: 8pt;" aria-label="tiles (1 item)">tiles</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/time-zones/" class="tag-cloud-link tag-link-44 tag-link-position-40" style="font-size: 8pt;" aria-label="time zones (1 item)">time zones</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/towns/" class="tag-cloud-link tag-link-42 tag-link-position-41" style="font-size: 8pt;" aria-label="towns (1 item)">towns</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/transportation/" class="tag-cloud-link tag-link-43 tag-link-position-42" style="font-size: 8pt;" aria-label="transportation (1 item)">transportation</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/update/" class="tag-cloud-link tag-link-33 tag-link-position-43" style="font-size: 22pt;" aria-label="update (3 items)">update</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/visitors/" class="tag-cloud-link tag-link-73 tag-link-position-44" style="font-size: 8pt;" aria-label="visitors (1 item)">visitors</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/world-file/" class="tag-cloud-link tag-link-70 tag-link-position-45" style="font-size: 8pt;" aria-label="world file (1 item)">world file</a></div>
|
||||
</li>
|
||||
<li id="recent-comments-3" class="widget widget_recent_comments"><h2 class="widgettitle">Recent Comments</h2>
|
||||
<ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link"><a href='http://www.bbscode.top/index.php/2022/03/17/aligning-natural-earth-geojson-and-raster-to-render-in-d3/' rel='external nofollow ugc' class='url'>Aligning Natural Earth Geojson and Raster to render in D3 – BBSCODE</a></span> on <a href="https://www.naturalearthdata.com/downloads/50m-raster-data/50m-shaded-relief/comment-page-1/#comment-6144">1:50m Shaded Relief</a></li><li class="recentcomments"><span class="comment-author-link"><a href='https://wp.csusm.edu/adahn/2022/03/14/qgis-a-mapping-tool/' rel='external nofollow ugc' class='url'>QGIS a Mapping Tool – April Dahn</a></span> on <a href="https://www.naturalearthdata.com/downloads/50m-raster-data/50m-shaded-relief/comment-page-1/#comment-6143">1:50m Shaded Relief</a></li><li class="recentcomments"><span class="comment-author-link"><a href='https://wp.csusm.edu/rsheehan/2022/03/13/more-mapping-with-qgis/' rel='external nofollow ugc' class='url'>More Mapping with QGIS – History 502</a></span> on <a href="https://www.naturalearthdata.com/downloads/50m-raster-data/50m-shaded-relief/comment-page-1/#comment-6142">1:50m Shaded Relief</a></li><li class="recentcomments"><span class="comment-author-link"><a href='http://ivermectin6mg.quest' rel='external nofollow ugc' class='url'>buy ivermectin 12 mg tablets</a></span> on <a href="https://www.naturalearthdata.com/forums/topic/download-urls-double-slash/comment-page-1/#comment-6141">Download URLs – double slash</a></li><li class="recentcomments"><span class="comment-author-link"><a href='https://slacker.ro/2021/10/01/building-a-beautiful-and-clear-map-from-massive-complex-data/' rel='external nofollow ugc' class='url'>Building A Beautiful And Clear Map From Massive, Complex Data – Slacker News</a></span> on <a href="https://www.naturalearthdata.com/downloads/10m-raster-data/10m-shaded-relief/comment-page-1/#comment-6140">1:10m Shaded Relief</a></li></ul></li>
|
||||
<li id="bbp_topics_widget-2" class="widget widget_display_topics"><h2 class="widgettitle">Recent Forum Topics</h2>
|
||||
|
||||
<ul class="bbp-topics-widget newness">
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/natural-earth-in-wagner-vii/">Natural Earth in Wagner VII</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/frax/" title="View Hugo Ahlenius's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/2bd3b3347fd34f7dd734bf4b78fb353d?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/2bd3b3347fd34f7dd734bf4b78fb353d?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">Hugo Ahlenius</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/downloads-are-404ing/">Downloads are 404ing</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/nathaniel/" title="View Nathaniel's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/e679fead4b7cb50b7b60e7c4f99bc348?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/e679fead4b7cb50b7b60e7c4f99bc348?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">Nathaniel</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/disputed-territories-type-field/">Disputed Territories: "type" field</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/alykat/" title="View alykat's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/8c60e36c6b6542afb738eb950429d6ba?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/8c60e36c6b6542afb738eb950429d6ba?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">alykat</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/iso-code-confusion/">ISO code confusion</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/nth/" title="View nth's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://0.gravatar.com/avatar/f5060dc4d25dbced2933380279e0c1c5?s=14&d=retro&r=g' srcset='http://0.gravatar.com/avatar/f5060dc4d25dbced2933380279e0c1c5?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">nth</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/bad-adm1name-encoding-in-version-3-0-0-and-missing-diacritics-in-name/">Bad ADM1NAME, encoding in version 3.0.0 and missing diacritics in NAME</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/pfunes/" title="View pfunes's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/eded29f5ea7062bfe350281260b0596b?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/eded29f5ea7062bfe350281260b0596b?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">pfunes</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/u-s-county-shape-file-2/">U.S. County Shape File</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/gzingsheim/" title="View gzingsheim's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://1.gravatar.com/avatar/d617957f9d5d7d062deeadbfa011d8b6?s=14&d=retro&r=g' srcset='http://1.gravatar.com/avatar/d617957f9d5d7d062deeadbfa011d8b6?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">gzingsheim</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/projection-proportion-compatibility/">Projection / Proportion / Compatibility?</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/liquidized/" title="View Liquidized's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://0.gravatar.com/avatar/06422086ab7aab2b767e3df7f7a67bdd?s=14&d=retro&r=g' srcset='http://0.gravatar.com/avatar/06422086ab7aab2b767e3df7f7a67bdd?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">Liquidized</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/download-urls-double-slash/">Download URLs – double slash</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/vastur/" title="View vastur's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/e07b4667376982e080d64cf0250acc9b?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/e07b4667376982e080d64cf0250acc9b?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">vastur</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/map-soft-writer-me/">map soft – writer: me</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/krzysztof/" title="View krzysztof's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/be9767706435aa6e10d50185f6def05e?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/be9767706435aa6e10d50185f6def05e?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">krzysztof</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/unicode-encoding-issue-ne_10m_lakes-dbf/">Unicode encoding issue – ne_10m_lakes.dbf</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/filter-1/" title="View filter.1's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://1.gravatar.com/avatar/daae13b2efd52a3865320ada9ed3ae18?s=14&d=retro&r=g' srcset='http://1.gravatar.com/avatar/daae13b2efd52a3865320ada9ed3ae18?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">filter.1</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<div id="footer">
|
||||
<div id="footerarea">
|
||||
<div id="footerlogos">
|
||||
<p>Supported by:</p>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.nacis.org" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/nacis.png" alt="NACIS" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.cartotalk.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/cartotalk_ad.png" alt="Cartotalk" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/mapgiving.png" alt="Mapgiving" />
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.geography.wisc.edu/cartography/" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/wisconsin.png" alt="University of Wisconsin Madison - Cartography Dept." /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.shadedrelief.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/shaded_relief.png" alt="Shaded Relief" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.xnrproductions.com " target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/xnr.png" alt="XNR Productions" /></a>
|
||||
</div>
|
||||
|
||||
<p style="clear:both;"></p>
|
||||
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.freac.fsu.edu" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/fsu.png" alt="Florida State University - FREAC" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.springercartographics.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/scllc.png" alt="Springer Cartographics LLC" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.washingtonpost.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/wpost.png" alt="Washington Post" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.redgeographics.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/redgeo.png" alt="Red Geographics" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://kelsocartography.com/blog " target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/kelso.png" alt="Kelso Cartography" /></a>
|
||||
</div>
|
||||
|
||||
<p style="clear:both;"></p>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.avenza.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/avenza.png" alt="Avenza Systems Inc." /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.stamen.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/stamen_ne_logo.png" alt="Stamen Design" /></a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<p style="clear:both;"></p>
|
||||
<span id="footerleft">
|
||||
© 2009 - 2022. Natural Earth. All rights reserved.
|
||||
</span>
|
||||
<span id="footerright">
|
||||
<!-- Please help promote WordPress and simpleX. Do not remove -->
|
||||
<div>Powered by <a href="http://wordpress.org/">WordPress</a></div>
|
||||
<div><a href="http://www.naturalearthdata.com/wp-admin">Staff Login »</a></div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<script type='text/javascript' src='http://www.naturalearthdata.com/wp-includes/js/wp-embed.min.js?ver=5.5.9' id='wp-embed-js'></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!-- Dynamic page generated in 0.317 seconds. -->
|
||||
<!-- Cached page generated by WP-Super-Cache on 2022-05-13 18:56:20 -->
|
||||
|
||||
<!-- Compression = gzip -->
|
||||
<!-- super cache -->
|
||||
@@ -0,0 +1 @@
|
||||
5.1.2
|
||||
@@ -0,0 +1 @@
|
||||
UTF-8
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
|
||||
Binary file not shown.
Binary file not shown.
508
scripts/overlay/ne_10m_roads/ne_10m_roads.README.html
Normal file
508
scripts/overlay/ne_10m_roads/ne_10m_roads.README.html
Normal file
@@ -0,0 +1,508 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
||||
|
||||
<head profile="http://gmpg.org/xfn/11">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
|
||||
<title>Natural Earth » Blog Archive » Roads - Free vector and raster map data at 1:10m, 1:50m, and 1:110m scales </title>
|
||||
|
||||
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
|
||||
<link rel="alternate" type="application/rss+xml" title="Natural Earth RSS Feed" href="https://www.naturalearthdata.com/feed/" />
|
||||
<link rel="pingback" href="http://www.naturalearthdata.com/xmlrpc.php" />
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/themes/NEV/includes/js/suckerfish.js"></script>
|
||||
<!--[if lt IE 7]>
|
||||
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script>
|
||||
<script defer="defer" type="text/javascript" src="http://www.naturalearthdata.com/wp-content/themes/NEV/includes/js/pngfix.js"></script>
|
||||
<![endif]-->
|
||||
<link rel="stylesheet" href="http://www.naturalearthdata.com/wp-content/themes/NEV/style.css" type="text/css" media="screen" />
|
||||
|
||||
<link rel='dns-prefetch' href='//s.w.org' />
|
||||
<script type="text/javascript">
|
||||
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.0.0\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/www.naturalearthdata.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.5.7"}};
|
||||
!function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([55357,56424,8205,55356,57212],[55357,56424,8203,55356,57212])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings);
|
||||
</script>
|
||||
<style type="text/css">
|
||||
img.wp-smiley,
|
||||
img.emoji {
|
||||
display: inline !important;
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
height: 1em !important;
|
||||
width: 1em !important;
|
||||
margin: 0 .07em !important;
|
||||
vertical-align: -0.1em !important;
|
||||
background: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
</style>
|
||||
<link rel='stylesheet' id='wp-block-library-css' href='http://www.naturalearthdata.com/wp-includes/css/dist/block-library/style.min.css?ver=5.5.7' type='text/css' media='all' />
|
||||
<link rel='stylesheet' id='bbp-child-bbpress-css' href='http://www.naturalearthdata.com/wp-content/themes/NEV/css/bbpress.css?ver=2.6.6' type='text/css' media='screen' />
|
||||
<link rel="https://api.w.org/" href="https://www.naturalearthdata.com/wp-json/" /><link rel="alternate" type="application/json" href="https://www.naturalearthdata.com/wp-json/wp/v2/posts/2718" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.naturalearthdata.com/xmlrpc.php?rsd" />
|
||||
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.naturalearthdata.com/wp-includes/wlwmanifest.xml" />
|
||||
<link rel='prev' title='Railroads' href='https://www.naturalearthdata.com/downloads/10m-cultural-vectors/railroads/' />
|
||||
<link rel='next' title='Graticules' href='https://www.naturalearthdata.com/downloads/10m-physical-vectors/10m-graticules/' />
|
||||
<meta name="generator" content="WordPress 5.5.7" />
|
||||
<link rel="canonical" href="https://www.naturalearthdata.com/downloads/10m-cultural-vectors/roads/" />
|
||||
<link rel='shortlink' href='https://www.naturalearthdata.com/?p=2718' />
|
||||
<link rel="alternate" type="application/json+oembed" href="https://www.naturalearthdata.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.naturalearthdata.com%2Fdownloads%2F10m-cultural-vectors%2Froads%2F" />
|
||||
<link rel="alternate" type="text/xml+oembed" href="https://www.naturalearthdata.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.naturalearthdata.com%2Fdownloads%2F10m-cultural-vectors%2Froads%2F&format=xml" />
|
||||
|
||||
<script type="text/javascript">
|
||||
/* <![CDATA[ */
|
||||
var ajaxurl = 'https://www.naturalearthdata.com/wp-admin/admin-ajax.php';
|
||||
|
||||
/* ]]> */
|
||||
</script>
|
||||
|
||||
|
||||
<!-- begin gallery scripts -->
|
||||
<link rel="stylesheet" href="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/css/jd.gallery.css.php" type="text/css" media="screen" charset="utf-8"/>
|
||||
<link rel="stylesheet" href="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/css/jd.gallery.css" type="text/css" media="screen" charset="utf-8"/>
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/scripts/mootools.v1.11.js"></script>
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/scripts/jd.gallery.js.php"></script>
|
||||
<script type="text/javascript" src="http://www.naturalearthdata.com/wp-content/plugins/featured-content-gallery/scripts/jd.gallery.transitions.js"></script>
|
||||
<!-- end gallery scripts -->
|
||||
<link href="http://www.naturalearthdata.com/wp-content/themes/NEV/css/default.css" rel="stylesheet" type="text/css" />
|
||||
<style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style><!--[if lte IE 7]>
|
||||
<link rel="stylesheet" type="text/css" href="http://www.naturalearthdata.com/wp-content/themes/NEV/ie.css" />
|
||||
<![endif]-->
|
||||
<script src="http://www.naturalearthdata.com/wp-content/themes/NEV/js/jquery-1.2.6.min.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script>
|
||||
jQuery.noConflict();
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(function(){
|
||||
var tabContainers = $('div#maintabdiv > div');
|
||||
tabContainers.hide().filter('#comments').show();
|
||||
|
||||
$('div#maintabdiv ul#tabnav a').click(function () {
|
||||
tabContainers.hide();
|
||||
tabContainers.filter(this.hash).show();
|
||||
$('div#maintabdiv ul#tabnav a').removeClass('current');
|
||||
$(this).addClass('current');
|
||||
return false;
|
||||
}).filter('#comments').click();
|
||||
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" language="javascript" src="http://www.naturalearthdata.com/dataTables/media/js/jquery.dataTables.js"></script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(document).ready(function() {
|
||||
$('#ne_table').dataTable();
|
||||
} );
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div id="header">
|
||||
<div id="headerimg">
|
||||
<h1><a href="https://www.naturalearthdata.com/"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/nev_logo.png" alt="Natural Earth title="Natural Earth" /></a></h1>
|
||||
<div class="description">Free vector and raster map data at 1:10m, 1:50m, and 1:110m scales</div>
|
||||
<div class="header_search"><form method="get" id="searchform" action="https://www.naturalearthdata.com/">
|
||||
<label class="hidden" for="s">Search for:</label>
|
||||
<div><input type="text" value="" name="s" id="s" />
|
||||
<input type="submit" id="searchsubmit" value="Search" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!--<div class="translate_panel" style="align:top; margin-left:650px; top:50px;">
|
||||
<div id="google_translate_element" style="float:left;"></div>
|
||||
<script>
|
||||
function googleTranslateElementInit() {
|
||||
new google.translate.TranslateElement({
|
||||
pageLanguage: 'en'
|
||||
}, 'google_translate_element');
|
||||
}
|
||||
</script>
|
||||
<script src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
<div id="pagemenu" style="align:bottom;">
|
||||
<ul id="page-list" class="clearfix"><li class="page_item page-item-4"><a href="https://www.naturalearthdata.com/">Home</a></li>
|
||||
<li class="page_item page-item-10"><a href="https://www.naturalearthdata.com/features/">Features</a></li>
|
||||
<li class="page_item page-item-12 page_item_has_children"><a href="https://www.naturalearthdata.com/downloads/">Downloads</a></li>
|
||||
<li class="page_item page-item-6 current_page_parent"><a href="https://www.naturalearthdata.com/blog/">Blog</a></li>
|
||||
<li class="page_item page-item-5044"><a href="https://www.naturalearthdata.com/issues/">Issues</a></li>
|
||||
<li class="page_item page-item-366"><a href="https://www.naturalearthdata.com/corrections/">Corrections</a></li>
|
||||
<li class="page_item page-item-16 page_item_has_children"><a href="https://www.naturalearthdata.com/about/">About</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<hr /><div id="main">
|
||||
<div id="content" class="narrowcolumn">
|
||||
|
||||
|
||||
<div class="post" id="post-2718">
|
||||
<h2>Roads</h2>
|
||||
|
||||
<div class="entry">
|
||||
<div class="downloadPromoBlock" style="float: left;">
|
||||
<div style="float: left; width: 170px;"><img loading="lazy" class="downloadPromoImage" title="urban_area_thumb" src="https://www.naturalearthdata.com/wp-content/uploads/2010/05/na_rds_thumb.png" alt="urban_area_thumb" width="150" height="100" align="left" /></div>
|
||||
<div style="float: left; width: 410px;"><em>Transportation. </em><div class="download-link-div">
|
||||
<a class="download-link" rel="nofollow" title="Downloaded 88783 times (Shapefile, geoDB, or TIFF format)" onclick="if (window.urchinTracker) urchinTracker ('https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads.zip');" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads.zip">Download roads</a> <span class="download-link-span">(8.65 MB) version 5.0.0</span>
|
||||
</div>
|
||||
<div class="download-link-div">
|
||||
<a class="download-link" rel="nofollow" title="Downloaded 18254 times (Shapefile, geoDB, or TIFF format)" onclick="if (window.urchinTracker) urchinTracker ('https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads_north_america.zip');" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads_north_america.zip">Download North America supplement</a> <span class="download-link-span">(45.57 MB) version 4.0.0</span>
|
||||
</div>
|
||||
<p><span id="more-2718"></span></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="downloadMainBlock" style="float: left;">
|
||||
<p><strong>About</strong></p>
|
||||
<p>The “basic” roads at 10m scale are from CEC North America Environmental Atlas with no attributes and only 1 scale rank class. The “basic” is only available in North America due to the source. We’d like to expand this to world wide, do you have data to contribute?</p>
|
||||
<p>The “supplementary” data in North America includes preliminary scale ranking and full list of attributes and is graciously contributed by <a href="http://www.xnrproductions.com/">XNR Productions</a>.</p>
|
||||
<p><em>(below) North America.</em><em> </em></p>
|
||||
<p><img loading="lazy" title="na_rds_banner" src="https://www.naturalearthdata.com/wp-content/uploads/2010/05/na_rds_banner.png" alt="na_rds_banner" width="580" height="150" /></p>
|
||||
<p><strong>Database background notes</strong></p>
|
||||
<p>The database is at 1:1,000,000 scale (but holds up to 1:250,000 scale), covering all of the United States and Canada, Alaska, Hawaii, Puerto Rico, Mexico, and Belize and includes the following attributes:</p>
|
||||
<p>NUMBER:</p>
|
||||
<ul>
|
||||
<li>Route number</li>
|
||||
</ul>
|
||||
<p>CLASS:</p>
|
||||
<ul>
|
||||
<li> Interstate (Interstates and Quebec Autoroutes)</li>
|
||||
<li> Federal (US Highways, Mexican Federal Highways, Trans-Canada Highways)</li>
|
||||
<li> State (US State, Mexican State, and Canadian Provincial Highways)</li>
|
||||
<li> Other (any other road class)</li>
|
||||
<li> Closed (road is closed to public)</li>
|
||||
<li> U/C (road is under construction)</li>
|
||||
</ul>
|
||||
<p>TYPE:</p>
|
||||
<ul>
|
||||
<li> Tollway</li>
|
||||
<li> Freeway</li>
|
||||
<li> Primary</li>
|
||||
<li> Secondary</li>
|
||||
<li> Other Paved</li>
|
||||
<li> Unpaved</li>
|
||||
<li> Winter (ice road, open winter only)</li>
|
||||
<li> Trail</li>
|
||||
<li> Ferry</li>
|
||||
</ul>
|
||||
<p>DIVIDED:</p>
|
||||
<ul>
|
||||
<li>Whether or not the road is divided. This field is only listed for roads of TYPE Tollway, Freeway, Primary, or Secondary.</li>
|
||||
</ul>
|
||||
<p>STATE:</p>
|
||||
<ul>
|
||||
<li>State or province the road is in.</li>
|
||||
</ul>
|
||||
<p><strong>Issues</strong></p>
|
||||
<ul>
|
||||
<li> BC ferries (AK and WA portions clip on BC boundary)</li>
|
||||
<li>normalize eastern Canada minor road coverage (remove some or add to US?)</li>
|
||||
</ul>
|
||||
<p><strong>Related projects</strong></p>
|
||||
<p><a href="http://geoservice.pbl.nl/website/flexviewer/index.html?config=cfg/PBL_GRIP.xml&center=5.2,52.1333&scale=5000000">Global Roads Inventory Project</a> – From the Netherlands Environmental Assessment Agency. The data in the GRIP database is presented as is. GRIP is a combination of some commercial and many publicly collected datasets and classified along the UNSDI-T datamodel. GRIP data scales vary between 1:100K to 1:1M. The GRIP density rasters and publicly collected features of GRIP are available under a BY-SA Creative Commons Licence. </p>
|
||||
<p><strong>Version History</strong></p>
|
||||
<ul>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 5.0.0 of ne_10m_roads.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads.zip">5.0.0</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 4.0.0 of ne_10m_roads.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads.zip?version=4.0.0">4.0.0</a>
|
||||
</li>
|
||||
<li>
|
||||
<a rel="nofollow" title="Download version 3.0.0 of ne_10m_roads.zip" href="https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_roads.zip?version=3.0.0">3.0.0</a>
|
||||
</li>
|
||||
<li>
|
||||
2.0.0
|
||||
</li>
|
||||
<li>
|
||||
1.3.0
|
||||
</li>
|
||||
<li>
|
||||
1.2.0
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p><a href="https://github.com/nvkelso/natural-earth-vector/blob/master/CHANGELOG">The master changelog is available on Github »</a></p>
|
||||
</div>
|
||||
|
||||
|
||||
<p class="postmetadata2">
|
||||
<small>
|
||||
This entry was posted
|
||||
on Monday, September 14th, 2009 at 1:30 am and is filed under <a href="https://www.naturalearthdata.com/download/downloads/10m-cultural-vectors/" rel="category tag">10m-cultural-vectors</a>, <a href="https://www.naturalearthdata.com/download/downloads/featured-on-homepage/" rel="category tag">Featured on Homepage</a>.
|
||||
You can follow any responses to this entry through the <a href="https://www.naturalearthdata.com/downloads/10m-cultural-vectors/roads/feed/">RSS 2.0</a> feed.
|
||||
|
||||
Both comments and pings are currently closed.
|
||||
|
||||
|
||||
</small>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- You can start editing here. -->
|
||||
|
||||
|
||||
<!-- If comments are closed. -->
|
||||
<p class="nocomments">Comments are closed.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div id="sidebar">
|
||||
<ul>
|
||||
<li id="rssfeeds">Subscribe: <a href="https://www.naturalearthdata.com/feed/">Entries</a> | <a href="https://www.naturalearthdata.com/comments/feed/">Comments</a></li>
|
||||
<li id="search-3" class="widget widget_search"><h2 class="widgettitle">Search</h2>
|
||||
<form method="get" id="searchform" action="https://www.naturalearthdata.com/">
|
||||
<label class="hidden" for="s">Search for:</label>
|
||||
<div><input type="text" value="" name="s" id="s" />
|
||||
<input type="submit" id="searchsubmit" value="Search" />
|
||||
</div>
|
||||
</form>
|
||||
</li>
|
||||
<li id="linkcat-2" class="widget widget_links"><h2 class="widgettitle">Links</h2>
|
||||
|
||||
<ul class='xoxo blogroll'>
|
||||
<li><a href="http://www.nacis.org">NACIS</a></li>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li id="tag_cloud-3" class="widget widget_tag_cloud"><h2 class="widgettitle">Tags</h2>
|
||||
<div class="tagcloud"><a href="https://www.naturalearthdata.com/tag/10m/" class="tag-cloud-link tag-link-65 tag-link-position-1" style="font-size: 16.4pt;" aria-label="10m (2 items)">10m</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/50m/" class="tag-cloud-link tag-link-64 tag-link-position-2" style="font-size: 8pt;" aria-label="50m (1 item)">50m</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/90/" class="tag-cloud-link tag-link-61 tag-link-position-3" style="font-size: 8pt;" aria-label="90 (1 item)">90</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/180/" class="tag-cloud-link tag-link-60 tag-link-position-4" style="font-size: 8pt;" aria-label="180 (1 item)">180</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/admin-0/" class="tag-cloud-link tag-link-40 tag-link-position-5" style="font-size: 8pt;" aria-label="admin-0 (1 item)">admin-0</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/bjorn/" class="tag-cloud-link tag-link-46 tag-link-position-6" style="font-size: 8pt;" aria-label="bjorn (1 item)">bjorn</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/bounding-box/" class="tag-cloud-link tag-link-68 tag-link-position-7" style="font-size: 8pt;" aria-label="bounding box (1 item)">bounding box</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/browser/" class="tag-cloud-link tag-link-47 tag-link-position-8" style="font-size: 8pt;" aria-label="browser (1 item)">browser</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/change-log/" class="tag-cloud-link tag-link-74 tag-link-position-9" style="font-size: 8pt;" aria-label="change log (1 item)">change log</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/corrections/" class="tag-cloud-link tag-link-34 tag-link-position-10" style="font-size: 8pt;" aria-label="corrections (1 item)">corrections</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/countries/" class="tag-cloud-link tag-link-41 tag-link-position-11" style="font-size: 8pt;" aria-label="countries (1 item)">countries</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/downloads/" class="tag-cloud-link tag-link-432 tag-link-position-12" style="font-size: 8pt;" aria-label="Downloads (1 item)">Downloads</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/error/" class="tag-cloud-link tag-link-67 tag-link-position-13" style="font-size: 8pt;" aria-label="error (1 item)">error</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/extent/" class="tag-cloud-link tag-link-69 tag-link-position-14" style="font-size: 8pt;" aria-label="extent (1 item)">extent</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/ext-js/" class="tag-cloud-link tag-link-56 tag-link-position-15" style="font-size: 8pt;" aria-label="ext js (1 item)">ext js</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/forums/" class="tag-cloud-link tag-link-35 tag-link-position-16" style="font-size: 8pt;" aria-label="forums (1 item)">forums</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/geoext/" class="tag-cloud-link tag-link-57 tag-link-position-17" style="font-size: 8pt;" aria-label="geoext (1 item)">geoext</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/hans/" class="tag-cloud-link tag-link-63 tag-link-position-18" style="font-size: 8pt;" aria-label="hans (1 item)">hans</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/imagery/" class="tag-cloud-link tag-link-59 tag-link-position-19" style="font-size: 8pt;" aria-label="imagery (1 item)">imagery</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/import/" class="tag-cloud-link tag-link-66 tag-link-position-20" style="font-size: 8pt;" aria-label="import (1 item)">import</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/mapnik/" class="tag-cloud-link tag-link-53 tag-link-position-21" style="font-size: 8pt;" aria-label="mapnik (1 item)">mapnik</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/maptiler/" class="tag-cloud-link tag-link-51 tag-link-position-22" style="font-size: 8pt;" aria-label="maptiler (1 item)">maptiler</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/map-tiles/" class="tag-cloud-link tag-link-49 tag-link-position-23" style="font-size: 8pt;" aria-label="map tiles (1 item)">map tiles</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/marine-boundary/" class="tag-cloud-link tag-link-76 tag-link-position-24" style="font-size: 8pt;" aria-label="marine boundary (1 item)">marine boundary</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/national-parks/" class="tag-cloud-link tag-link-75 tag-link-position-25" style="font-size: 8pt;" aria-label="national parks (1 item)">national parks</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/new-data/" class="tag-cloud-link tag-link-36 tag-link-position-26" style="font-size: 8pt;" aria-label="new data (1 item)">new data</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/nsd/" class="tag-cloud-link tag-link-72 tag-link-position-27" style="font-size: 8pt;" aria-label="nsd (1 item)">nsd</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/openlayers/" class="tag-cloud-link tag-link-55 tag-link-position-28" style="font-size: 8pt;" aria-label="openlayers (1 item)">openlayers</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/physical-labels/" class="tag-cloud-link tag-link-38 tag-link-position-29" style="font-size: 8pt;" aria-label="physical labels (1 item)">physical labels</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/pngng/" class="tag-cloud-link tag-link-52 tag-link-position-30" style="font-size: 8pt;" aria-label="pngng (1 item)">pngng</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/populated-places/" class="tag-cloud-link tag-link-39 tag-link-position-31" style="font-size: 8pt;" aria-label="populated places (1 item)">populated places</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/raster/" class="tag-cloud-link tag-link-58 tag-link-position-32" style="font-size: 16.4pt;" aria-label="raster (2 items)">raster</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/terrestrial-hypsography/" class="tag-cloud-link tag-link-45 tag-link-position-33" style="font-size: 8pt;" aria-label="terrestrial hypsography (1 item)">terrestrial hypsography</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tfw/" class="tag-cloud-link tag-link-62 tag-link-position-34" style="font-size: 8pt;" aria-label="tfw (1 item)">tfw</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/thematic-mapping/" class="tag-cloud-link tag-link-48 tag-link-position-35" style="font-size: 8pt;" aria-label="thematic mapping (1 item)">thematic mapping</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/themese/" class="tag-cloud-link tag-link-37 tag-link-position-36" style="font-size: 8pt;" aria-label="themese (1 item)">themese</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tif/" class="tag-cloud-link tag-link-71 tag-link-position-37" style="font-size: 8pt;" aria-label="tif (1 item)">tif</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tilecache/" class="tag-cloud-link tag-link-54 tag-link-position-38" style="font-size: 8pt;" aria-label="tilecache (1 item)">tilecache</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/tiles/" class="tag-cloud-link tag-link-50 tag-link-position-39" style="font-size: 8pt;" aria-label="tiles (1 item)">tiles</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/time-zones/" class="tag-cloud-link tag-link-44 tag-link-position-40" style="font-size: 8pt;" aria-label="time zones (1 item)">time zones</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/towns/" class="tag-cloud-link tag-link-42 tag-link-position-41" style="font-size: 8pt;" aria-label="towns (1 item)">towns</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/transportation/" class="tag-cloud-link tag-link-43 tag-link-position-42" style="font-size: 8pt;" aria-label="transportation (1 item)">transportation</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/update/" class="tag-cloud-link tag-link-33 tag-link-position-43" style="font-size: 22pt;" aria-label="update (3 items)">update</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/visitors/" class="tag-cloud-link tag-link-73 tag-link-position-44" style="font-size: 8pt;" aria-label="visitors (1 item)">visitors</a>
|
||||
<a href="https://www.naturalearthdata.com/tag/world-file/" class="tag-cloud-link tag-link-70 tag-link-position-45" style="font-size: 8pt;" aria-label="world file (1 item)">world file</a></div>
|
||||
</li>
|
||||
<li id="recent-comments-3" class="widget widget_recent_comments"><h2 class="widgettitle">Recent Comments</h2>
|
||||
<ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link"><a href='http://ivermectin3-mg.com' rel='external nofollow ugc' class='url'>ivermectin 3mg tablets</a></span> on <a href="https://www.naturalearthdata.com/forums/topic/download-urls-double-slash/comment-page-1/#comment-6131">Download URLs – double slash</a></li><li class="recentcomments"><span class="comment-author-link"><a href='http://ivermectin3-mg.net' rel='external nofollow ugc' class='url'>stromectol 6 mg dosage</a></span> on <a href="https://www.naturalearthdata.com/forums/topic/download-urls-double-slash/comment-page-1/#comment-6130">Download URLs – double slash</a></li><li class="recentcomments"><span class="comment-author-link"><a href='https://www.avenza.com/resources/2021/11/30/day-30-reflecting-on-the-30daymapchallenge/' rel='external nofollow ugc' class='url'>Avenza Systems | Map and Cartography Tools</a></span> on <a href="https://www.naturalearthdata.com/downloads/50m-raster-data/50m-manual-shaded-relief/comment-page-1/#comment-6129">1:50m Manual Shaded Relief</a></li><li class="recentcomments"><span class="comment-author-link"><a href='http://ivermectin-6mg.net' rel='external nofollow ugc' class='url'>ivermectin 6mg tablets</a></span> on <a href="https://www.naturalearthdata.com/forums/topic/download-urls-double-slash/comment-page-1/#comment-6128">Download URLs – double slash</a></li><li class="recentcomments"><span class="comment-author-link"><a href='http://stromectol2ivermectin.com' rel='external nofollow ugc' class='url'>stromectol cvs</a></span> on <a href="https://www.naturalearthdata.com/forums/topic/download-urls-double-slash/comment-page-1/#comment-6127">Download URLs – double slash</a></li></ul></li>
|
||||
<li id="bbp_topics_widget-2" class="widget widget_display_topics"><h2 class="widgettitle">Recent Forum Topics</h2>
|
||||
|
||||
<ul class="bbp-topics-widget newness">
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/natural-earth-in-wagner-vii/">Natural Earth in Wagner VII</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/frax/" title="View Hugo Ahlenius's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/2bd3b3347fd34f7dd734bf4b78fb353d?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/2bd3b3347fd34f7dd734bf4b78fb353d?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">Hugo Ahlenius</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/downloads-are-404ing/">Downloads are 404ing</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/nathaniel/" title="View Nathaniel's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/e679fead4b7cb50b7b60e7c4f99bc348?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/e679fead4b7cb50b7b60e7c4f99bc348?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">Nathaniel</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/disputed-territories-type-field/">Disputed Territories: "type" field</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/alykat/" title="View alykat's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/8c60e36c6b6542afb738eb950429d6ba?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/8c60e36c6b6542afb738eb950429d6ba?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">alykat</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/iso-code-confusion/">ISO code confusion</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/nth/" title="View nth's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://0.gravatar.com/avatar/f5060dc4d25dbced2933380279e0c1c5?s=14&d=retro&r=g' srcset='http://0.gravatar.com/avatar/f5060dc4d25dbced2933380279e0c1c5?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">nth</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/bad-adm1name-encoding-in-version-3-0-0-and-missing-diacritics-in-name/">Bad ADM1NAME, encoding in version 3.0.0 and missing diacritics in NAME</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/pfunes/" title="View pfunes's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/eded29f5ea7062bfe350281260b0596b?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/eded29f5ea7062bfe350281260b0596b?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">pfunes</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/u-s-county-shape-file-2/">U.S. County Shape File</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/gzingsheim/" title="View gzingsheim's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://1.gravatar.com/avatar/d617957f9d5d7d062deeadbfa011d8b6?s=14&d=retro&r=g' srcset='http://1.gravatar.com/avatar/d617957f9d5d7d062deeadbfa011d8b6?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">gzingsheim</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/projection-proportion-compatibility/">Projection / Proportion / Compatibility?</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/liquidized/" title="View Liquidized's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://0.gravatar.com/avatar/06422086ab7aab2b767e3df7f7a67bdd?s=14&d=retro&r=g' srcset='http://0.gravatar.com/avatar/06422086ab7aab2b767e3df7f7a67bdd?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">Liquidized</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/download-urls-double-slash/">Download URLs – double slash</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/vastur/" title="View vastur's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/e07b4667376982e080d64cf0250acc9b?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/e07b4667376982e080d64cf0250acc9b?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">vastur</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/map-soft-writer-me/">map soft – writer: me</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/krzysztof/" title="View krzysztof's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://2.gravatar.com/avatar/be9767706435aa6e10d50185f6def05e?s=14&d=retro&r=g' srcset='http://2.gravatar.com/avatar/be9767706435aa6e10d50185f6def05e?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">krzysztof</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
<li>
|
||||
<a class="bbp-forum-title" href="https://www.naturalearthdata.com/forums/topic/unicode-encoding-issue-ne_10m_lakes-dbf/">Unicode encoding issue – ne_10m_lakes.dbf</a>
|
||||
|
||||
|
||||
by <span class="topic-author"><a href="https://www.naturalearthdata.com/forums/users/filter-1/" title="View filter.1's profile" class="bbp-author-link"><span class="bbp-author-avatar"><img alt='' src='http://1.gravatar.com/avatar/daae13b2efd52a3865320ada9ed3ae18?s=14&d=retro&r=g' srcset='http://1.gravatar.com/avatar/daae13b2efd52a3865320ada9ed3ae18?s=28&d=retro&r=g 2x' class='avatar avatar-14 photo' height='14' width='14' loading='lazy'/></span><span class="bbp-author-name">filter.1</span></a></span>
|
||||
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
</ul>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
<div id="footer">
|
||||
<div id="footerarea">
|
||||
<div id="footerlogos">
|
||||
<p>Supported by:</p>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.nacis.org" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/nacis.png" alt="NACIS" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.cartotalk.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/cartotalk_ad.png" alt="Cartotalk" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/mapgiving.png" alt="Mapgiving" />
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.geography.wisc.edu/cartography/" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/wisconsin.png" alt="University of Wisconsin Madison - Cartography Dept." /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.shadedrelief.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/shaded_relief.png" alt="Shaded Relief" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.xnrproductions.com " target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/xnr.png" alt="XNR Productions" /></a>
|
||||
</div>
|
||||
|
||||
<p style="clear:both;"></p>
|
||||
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.freac.fsu.edu" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/fsu.png" alt="Florida State University - FREAC" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.springercartographics.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/scllc.png" alt="Springer Cartographics LLC" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.washingtonpost.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/wpost.png" alt="Washington Post" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.redgeographics.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/redgeo.png" alt="Red Geographics" /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://kelsocartography.com/blog " target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/kelso.png" alt="Kelso Cartography" /></a>
|
||||
</div>
|
||||
|
||||
<p style="clear:both;"></p>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.avenza.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/avenza.png" alt="Avenza Systems Inc." /></a>
|
||||
</div>
|
||||
<div class="footer-ad-box">
|
||||
<a href="http://www.stamen.com" target="_blank"><img src="http://www.naturalearthdata.com/wp-content/themes/NEV/images/stamen_ne_logo.png" alt="Stamen Design" /></a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<p style="clear:both;"></p>
|
||||
<span id="footerleft">
|
||||
© 2009 - 2021. Natural Earth. All rights reserved.
|
||||
</span>
|
||||
<span id="footerright">
|
||||
<!-- Please help promote WordPress and simpleX. Do not remove -->
|
||||
<div>Powered by <a href="http://wordpress.org/">WordPress</a></div>
|
||||
<div><a href="http://www.naturalearthdata.com/wp-admin">Staff Login »</a></div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<script type='text/javascript' src='http://www.naturalearthdata.com/wp-includes/js/wp-embed.min.js?ver=5.5.7' id='wp-embed-js'></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!-- Dynamic page generated in 1.059 seconds. -->
|
||||
<!-- Cached page generated by WP-Super-Cache on 2021-12-07 19:24:20 -->
|
||||
|
||||
<!-- Compression = gzip -->
|
||||
<!-- super cache -->
|
||||
1
scripts/overlay/ne_10m_roads/ne_10m_roads.VERSION.txt
Normal file
1
scripts/overlay/ne_10m_roads/ne_10m_roads.VERSION.txt
Normal file
@@ -0,0 +1 @@
|
||||
5.0.0
|
||||
1
scripts/overlay/ne_10m_roads/ne_10m_roads.cpg
Normal file
1
scripts/overlay/ne_10m_roads/ne_10m_roads.cpg
Normal file
@@ -0,0 +1 @@
|
||||
UTF-8
|
||||
BIN
scripts/overlay/ne_10m_roads/ne_10m_roads.dbf
Normal file
BIN
scripts/overlay/ne_10m_roads/ne_10m_roads.dbf
Normal file
Binary file not shown.
1
scripts/overlay/ne_10m_roads/ne_10m_roads.prj
Normal file
1
scripts/overlay/ne_10m_roads/ne_10m_roads.prj
Normal file
@@ -0,0 +1 @@
|
||||
GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
|
||||
BIN
scripts/overlay/ne_10m_roads/ne_10m_roads.shp
Normal file
BIN
scripts/overlay/ne_10m_roads/ne_10m_roads.shp
Normal file
Binary file not shown.
BIN
scripts/overlay/ne_10m_roads/ne_10m_roads.shx
Normal file
BIN
scripts/overlay/ne_10m_roads/ne_10m_roads.shx
Normal file
Binary file not shown.
53
scripts/overlay/roads-geojson-generate.py
Normal file
53
scripts/overlay/roads-geojson-generate.py
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
convert_roads.py
|
||||
BoopLabs Pupmap Europe/Nordics Roads GeoJSON
|
||||
Version: 2025-10-03
|
||||
"""
|
||||
|
||||
import geopandas as gpd
|
||||
|
||||
# ---------- User paths ----------
|
||||
roads_shp = "ne_10m_roads.shp"
|
||||
output_dir = "/mnt/storage/docker-data/pupmap/www/data/"
|
||||
|
||||
# ---------- Europe + Nordics ISO3 ----------
|
||||
europe_nordics = [
|
||||
'ALB','AND','AUT','BEL','BIH','BGR','HRV','CYP','CZE','DNK','EST','FIN','FRA','DEU',
|
||||
'GRC','HUN','ISL','IRL','ITA','LVA','LTU','LUX','MLT','MDA','MCO','MNE','NLD','NOR',
|
||||
'POL','PRT','ROU','RUS','SMR','SRB','SVK','SVN','ESP','SWE','CHE','UKR','GBR','VAT'
|
||||
]
|
||||
|
||||
# ---------- Load roads shapefile ----------
|
||||
print("Processing roads...")
|
||||
roads = gpd.read_file(roads_shp)
|
||||
|
||||
# Filter Europe/Nordics only if ADM0_A3 exists
|
||||
if 'ADM0_A3' in roads.columns:
|
||||
roads_filtered = roads[roads['ADM0_A3'].isin(europe_nordics)].copy()
|
||||
else:
|
||||
roads_filtered = roads.copy() # fallback: include all
|
||||
|
||||
# Determine road type column
|
||||
if 'TYPE' in roads_filtered.columns:
|
||||
roads_filtered = roads_filtered.rename(columns={'TYPE': 'type'})
|
||||
elif 'fclass' in roads_filtered.columns:
|
||||
roads_filtered = roads_filtered.rename(columns={'fclass': 'type'})
|
||||
elif 'ROADCLASS' in roads_filtered.columns:
|
||||
roads_filtered = roads_filtered.rename(columns={'ROADCLASS': 'type'})
|
||||
else:
|
||||
roads_filtered['type'] = 'road' # fallback
|
||||
|
||||
# Keep only necessary columns
|
||||
roads_filtered = roads_filtered[['type','geometry']]
|
||||
|
||||
# Remove duplicates and empty geometries
|
||||
roads_filtered = roads_filtered.loc[:, ~roads_filtered.columns.duplicated()]
|
||||
roads_filtered = roads_filtered[roads_filtered.geometry.notnull()]
|
||||
|
||||
# Save to GeoJSON
|
||||
roads_geojson_path = output_dir + "roads_europe.geojson"
|
||||
roads_filtered.to_file(roads_geojson_path, driver='GeoJSON')
|
||||
print(f"Saved {roads_geojson_path} ({len(roads_filtered)} features)")
|
||||
|
||||
23
scripts/overlay/roads2-geojson-generate.py
Normal file
23
scripts/overlay/roads2-geojson-generate.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import geopandas as gpd
|
||||
|
||||
# Load roads shapefile
|
||||
gdf = gpd.read_file("/mnt/storage/docker-data/pupmap/www/data/sources/ne_10m_roads.shp")
|
||||
|
||||
# Filter by Europe/Nordics bounding box
|
||||
bbox = (-25.0, 34.0, 35.0, 72.0) # lon_min, lat_min, lon_max, lat_max
|
||||
gdf = gdf.cx[bbox[0]:bbox[2], bbox[1]:bbox[3]]
|
||||
|
||||
# Ensure WGS84 CRS
|
||||
gdf = gdf.to_crs(epsg=4326)
|
||||
|
||||
# Add 'type' property if missing
|
||||
if 'type' not in gdf.columns:
|
||||
gdf['type'] = 'road'
|
||||
else:
|
||||
gdf['type'] = gdf['type'].fillna('road')
|
||||
|
||||
# Save to GeoJSON
|
||||
gdf.to_file("/mnt/storage/docker-data/pupmap/www/data/roads_europe.geojson", driver="GeoJSON")
|
||||
|
||||
print("Cleaned roads saved to roads_europe.geojson")
|
||||
|
||||
22
scripts/places/data/places.geojson
Normal file
22
scripts/places/data/places.geojson
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
10.740350000000001,
|
||||
59.90970000000001
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"SLMOslo"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "SLMOslo"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
124
scripts/places/data/pois.geojson
Normal file
124
scripts/places/data/pois.geojson
Normal file
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
10.42,
|
||||
59.21
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"BoltJW"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "BoltJW"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.32,
|
||||
60.39
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"Markos"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "Markos"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.8,
|
||||
58.870000000000005
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupFenling"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupFenling"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
6.97,
|
||||
51.45
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PianoVanBarkhoven"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PianoVanBarkhoven"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
20.98,
|
||||
70.04
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"NordicSub"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "NordicSub"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
11.26,
|
||||
60.33
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupCatalyst"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupCatalyst"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.75,
|
||||
58.86
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupSebbi"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupSebbi"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
42
scripts/places/places-geojson-generate.py
Normal file
42
scripts/places/places-geojson-generate.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import csv
|
||||
import json
|
||||
from collections import defaultdict
|
||||
|
||||
csv_file = "places.csv"
|
||||
geojson_file = "data/places.geojson"
|
||||
|
||||
GROUP_TOLERANCE = 0.00001 # cluster distance in degrees
|
||||
|
||||
def round_coord(coord):
|
||||
return round(coord / GROUP_TOLERANCE) * GROUP_TOLERANCE
|
||||
|
||||
clusters = defaultdict(list)
|
||||
|
||||
with open(csv_file, newline='', encoding='utf-8') as f:
|
||||
reader = csv.DictReader(f)
|
||||
for row in reader:
|
||||
lat = float(row['latitude'])
|
||||
lon = float(row['longitude'])
|
||||
name = row['name']
|
||||
key = (round_coord(lat), round_coord(lon))
|
||||
clusters[key].append(name)
|
||||
|
||||
features = []
|
||||
for (lat, lon), names in clusters.items():
|
||||
features.append({
|
||||
"type": "Feature",
|
||||
"geometry": { "type": "Point", "coordinates": [lon, lat] },
|
||||
"properties": {
|
||||
"names": names,
|
||||
"count": len(names),
|
||||
"popup": ", ".join(names)
|
||||
}
|
||||
})
|
||||
|
||||
geojson = { "type": "FeatureCollection", "features": features }
|
||||
|
||||
with open(geojson_file, "w", encoding='utf-8') as f:
|
||||
json.dump(geojson, f, indent=2)
|
||||
|
||||
print(f"Generated {geojson_file} with {len(features)} clustered POIs.")
|
||||
|
||||
2
www/data/README.md
Normal file
2
www/data/README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
Placeholder file world.pmtiles (120GB, didnt want to include).
|
||||
Can be downloaded from https://maps.protomaps.com/builds/
|
||||
0
www/data/index.html
Normal file
0
www/data/index.html
Normal file
22
www/data/places.geojson
Normal file
22
www/data/places.geojson
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
10.740350000000001,
|
||||
59.90970000000001
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"SLMOslo"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "SLMOslo"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
141
www/data/pois.geojson
Normal file
141
www/data/pois.geojson
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
10.42,
|
||||
59.21
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"BoltJW"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "BoltJW"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.32,
|
||||
60.39
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"Markos"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "Markos"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.8,
|
||||
58.870000000000005
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupFenling"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupFenling"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
6.97,
|
||||
51.45
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PianoVanBarkhoven"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PianoVanBarkhoven"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
20.98,
|
||||
70.04
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"NordicSub"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "NordicSub"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
11.26,
|
||||
60.33
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupCatalyst"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupCatalyst"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
5.75,
|
||||
58.86
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupSebbi"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupSebbi"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [
|
||||
10.200000000000001,
|
||||
59.74
|
||||
]
|
||||
},
|
||||
"properties": {
|
||||
"names": [
|
||||
"PupTiff"
|
||||
],
|
||||
"count": 1,
|
||||
"popup": "PupTiff"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
9644
www/data/roads_europe_clean.geojson
Normal file
9644
www/data/roads_europe_clean.geojson
Normal file
File diff suppressed because one or more lines are too long
0
www/data/world.pmtiles.phldr
Normal file
0
www/data/world.pmtiles.phldr
Normal file
487
www/data/world_cities_europe_clean.geojson
Normal file
487
www/data/world_cities_europe_clean.geojson
Normal file
@@ -0,0 +1,487 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"name": "world_cities_europe_clean",
|
||||
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
||||
"features": [
|
||||
{ "type": "Feature", "properties": { "NAME": "Delémont", "POP_MAX": 11315 }, "geometry": { "type": "Point", "coordinates": [ 7.3449995, 47.3699971 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Neuchâtel", "POP_MAX": 31270 }, "geometry": { "type": "Point", "coordinates": [ 6.9229986, 46.9989991 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Aarau", "POP_MAX": 15501 }, "geometry": { "type": "Point", "coordinates": [ 8.0340036, 47.3900041 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Stans", "POP_MAX": 7475 }, "geometry": { "type": "Point", "coordinates": [ 8.3833025, 46.9500031 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sion", "POP_MAX": 28045 }, "geometry": { "type": "Point", "coordinates": [ 7.3539995, 46.239003 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Herisau", "POP_MAX": 15438 }, "geometry": { "type": "Point", "coordinates": [ 9.2833025, 47.383299 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Saint Gallen", "POP_MAX": 70572 }, "geometry": { "type": "Point", "coordinates": [ 9.3619986, 47.4229981 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bellinzona", "POP_MAX": 16572 }, "geometry": { "type": "Point", "coordinates": [ 9.0199986, 46.1970001 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Glarus", "POP_MAX": 5681 }, "geometry": { "type": "Point", "coordinates": [ 9.0666996, 47.050002 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Schaffhausen", "POP_MAX": 33863 }, "geometry": { "type": "Point", "coordinates": [ 8.6329985, 47.7060031 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Schwyz", "POP_MAX": 14177 }, "geometry": { "type": "Point", "coordinates": [ 8.6480016, 47.019996 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Frauenfeld", "POP_MAX": 21979 }, "geometry": { "type": "Point", "coordinates": [ 8.904888469310368, 47.552619422656129 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Altdorf", "POP_MAX": 8678 }, "geometry": { "type": "Point", "coordinates": [ 8.6380026, 46.8790021 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Zug", "POP_MAX": 23435 }, "geometry": { "type": "Point", "coordinates": [ 8.4870006, 47.178999 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Falun", "POP_MAX": 36477 }, "geometry": { "type": "Point", "coordinates": [ 15.6470046, 60.613002 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nyköping", "POP_MAX": 27582 }, "geometry": { "type": "Point", "coordinates": [ 16.996082309454142, 58.751989933602339 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Härnösand", "POP_MAX": 17016 }, "geometry": { "type": "Point", "coordinates": [ 17.9340036, 62.633997 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Karlskrona", "POP_MAX": 35212 }, "geometry": { "type": "Point", "coordinates": [ 15.590754198529854, 56.162780641493903 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mérida", "POP_MAX": 52423 }, "geometry": { "type": "Point", "coordinates": [ -6.3379975, 38.912004 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Assen", "POP_MAX": 62237 }, "geometry": { "type": "Point", "coordinates": [ 6.5500026, 53.0000011 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Arnhem", "POP_MAX": 141674 }, "geometry": { "type": "Point", "coordinates": [ 5.9229996, 51.987996 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Maastricht", "POP_MAX": 122378 }, "geometry": { "type": "Point", "coordinates": [ 5.6770025, 50.8529971 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Zwolle", "POP_MAX": 111805 }, "geometry": { "type": "Point", "coordinates": [ 6.0969965, 52.5240001 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Middelburg", "POP_MAX": 46485 }, "geometry": { "type": "Point", "coordinates": [ 3.6099995, 51.5019962 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "'s-Hertogenbosch", "POP_MAX": 134520 }, "geometry": { "type": "Point", "coordinates": [ 5.3166605, 51.6833371 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Arendal", "POP_MAX": 30916 }, "geometry": { "type": "Point", "coordinates": [ 8.7660006, 58.4647561 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vossavangen", "POP_MAX": 5571 }, "geometry": { "type": "Point", "coordinates": [ 6.4410035, 60.6300032 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Leikanger", "POP_MAX": 1965 }, "geometry": { "type": "Point", "coordinates": [ 6.8499995, 61.1832961 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bærum", "POP_MAX": 113659 }, "geometry": { "type": "Point", "coordinates": [ 11.3472365, 59.9134861 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hamar", "POP_MAX": 29479 }, "geometry": { "type": "Point", "coordinates": [ 11.0690016, 60.8200021 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Tønsberg", "POP_MAX": 38914 }, "geometry": { "type": "Point", "coordinates": [ 10.4210015, 59.2640011 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Fribourg", "POP_MAX": 32827 }, "geometry": { "type": "Point", "coordinates": [ 7.1499965, 46.8000001 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Liestal", "POP_MAX": 12832 }, "geometry": { "type": "Point", "coordinates": [ 7.7370035, 47.4830011 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Solothurn", "POP_MAX": 14853 }, "geometry": { "type": "Point", "coordinates": [ 7.5369966, 47.2120021 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sarnen", "POP_MAX": 9410 }, "geometry": { "type": "Point", "coordinates": [ 8.2430015, 46.899 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mariestad", "POP_MAX": 14891 }, "geometry": { "type": "Point", "coordinates": [ 13.8279966, 58.7050021 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vannersborg", "POP_MAX": 21835 }, "geometry": { "type": "Point", "coordinates": [ 12.3300006, 58.3630021 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Appenzell", "POP_MAX": 5649 }, "geometry": { "type": "Point", "coordinates": [ 9.4167005, 47.3333041 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ros Comain", "POP_MAX": 4860 }, "geometry": { "type": "Point", "coordinates": [ -8.1833333, 53.6333333 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Potenza", "POP_MAX": 69060 }, "geometry": { "type": "Point", "coordinates": [ 15.7989965, 40.6420021 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Campobasso", "POP_MAX": 50762 }, "geometry": { "type": "Point", "coordinates": [ 14.6559966, 41.5629991 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Aosta", "POP_MAX": 34062 }, "geometry": { "type": "Point", "coordinates": [ 7.3150026, 45.7370011 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Diekirch", "POP_MAX": 6242 }, "geometry": { "type": "Point", "coordinates": [ 6.1667016, 49.8833011 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Grevenmacher", "POP_MAX": 3958 }, "geometry": { "type": "Point", "coordinates": [ 6.425599376387133, 49.67975296258291 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hämeenlinna", "POP_MAX": 47261 }, "geometry": { "type": "Point", "coordinates": [ 24.4719995, 60.9969961 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kouvola", "POP_MAX": 31133 }, "geometry": { "type": "Point", "coordinates": [ 26.7090035, 60.8760001 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mikkeli", "POP_MAX": 46550 }, "geometry": { "type": "Point", "coordinates": [ 27.2850035, 61.6899962 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Muineachan", "POP_MAX": 5937 }, "geometry": { "type": "Point", "coordinates": [ -6.9666667, 54.25 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vejle", "POP_MAX": 51177 }, "geometry": { "type": "Point", "coordinates": [ 9.5349965, 55.709001 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hillerød", "POP_MAX": 28313 }, "geometry": { "type": "Point", "coordinates": [ 12.3166985, 55.9332991 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sorø", "POP_MAX": 7167 }, "geometry": { "type": "Point", "coordinates": [ 11.5667016, 55.4329981 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mons", "POP_MAX": 91277 }, "geometry": { "type": "Point", "coordinates": [ 3.9390036, 50.4459991 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hasselt", "POP_MAX": 69222 }, "geometry": { "type": "Point", "coordinates": [ 5.338536386219118, 50.928838164664029 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Arlon", "POP_MAX": 26179 }, "geometry": { "type": "Point", "coordinates": [ 5.8167005, 49.6833031 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bregenz", "POP_MAX": 26928 }, "geometry": { "type": "Point", "coordinates": [ 9.7667016, 47.5166971 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Eisenstadt", "POP_MAX": 13165 }, "geometry": { "type": "Point", "coordinates": [ 16.5332975, 47.8332991 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Borgarnes", "POP_MAX": 1783 }, "geometry": { "type": "Point", "coordinates": [ -21.8623222, 64.5695028 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mainz", "POP_MAX": 184997 }, "geometry": { "type": "Point", "coordinates": [ 8.2732192, 49.9824725 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Schwerin", "POP_MAX": 96641 }, "geometry": { "type": "Point", "coordinates": [ 11.4166986, 53.6333041 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Marbella", "POP_MAX": 186131 }, "geometry": { "type": "Point", "coordinates": [ -4.8833301, 36.5166199 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Linares", "POP_MAX": 59761 }, "geometry": { "type": "Point", "coordinates": [ -3.6333547, 38.0833201 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Algeciras", "POP_MAX": 111027 }, "geometry": { "type": "Point", "coordinates": [ -5.452659839737986, 36.131881591291716 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "León", "POP_MAX": 136227 }, "geometry": { "type": "Point", "coordinates": [ -5.5700066, 42.5799707 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mataró", "POP_MAX": 183293 }, "geometry": { "type": "Point", "coordinates": [ 2.4500207, 41.5399567 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Chur", "POP_MAX": 38293 }, "geometry": { "type": "Point", "coordinates": [ 9.5000297, 46.8500202 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Borlänge", "POP_MAX": 39422 }, "geometry": { "type": "Point", "coordinates": [ 15.4166711, 60.4833224 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Västerås", "POP_MAX": 107194 }, "geometry": { "type": "Point", "coordinates": [ 16.5576798129634, 59.609083757164619 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Gijón", "POP_MAX": 335972 }, "geometry": { "type": "Point", "coordinates": [ -5.6700004, 43.5300161 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vitoria", "POP_MAX": 224578 }, "geometry": { "type": "Point", "coordinates": [ -2.6699768, 42.8499801 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Greenock", "POP_MAX": 74635 }, "geometry": { "type": "Point", "coordinates": [ -4.7500308, 55.93329 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sunderland", "POP_MAX": 452934 }, "geometry": { "type": "Point", "coordinates": [ -1.379881564518565, 54.903407084625925 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Southampton", "POP_MAX": 384417 }, "geometry": { "type": "Point", "coordinates": [ -1.3999768, 50.9000314 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bristol", "POP_MAX": 553528 }, "geometry": { "type": "Point", "coordinates": [ -2.5833155, 51.4499978 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bournemouth", "POP_MAX": 426945 }, "geometry": { "type": "Point", "coordinates": [ -1.9000497, 50.7299901 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Omagh", "POP_MAX": 21056 }, "geometry": { "type": "Point", "coordinates": [ -7.3000043, 54.6000122 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Chester", "POP_MAX": 89531 }, "geometry": { "type": "Point", "coordinates": [ -2.902964575974897, 53.186325091374322 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Swansea", "POP_MAX": 294339 }, "geometry": { "type": "Point", "coordinates": [ -3.9500021, 51.6299868 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Carlisle", "POP_MAX": 72633 }, "geometry": { "type": "Point", "coordinates": [ -2.9299868, 54.8799951 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Southend-on-Sea", "POP_MAX": 618386 }, "geometry": { "type": "Point", "coordinates": [ 0.7199971, 51.5500175 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Reading", "POP_MAX": 369804 }, "geometry": { "type": "Point", "coordinates": [ -0.9800283, 51.4699707 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Leicester", "POP_MAX": 457983 }, "geometry": { "type": "Point", "coordinates": [ -1.1332489, 52.6299774 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bradford", "POP_MAX": 501700 }, "geometry": { "type": "Point", "coordinates": [ -1.754464650200906, 53.79167546080204 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sheffield", "POP_MAX": 1292900 }, "geometry": { "type": "Point", "coordinates": [ -1.4999966, 53.3666767 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Biel", "POP_MAX": 78708 }, "geometry": { "type": "Point", "coordinates": [ 7.2500378, 47.16659 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Finnsnes", "POP_MAX": 3907 }, "geometry": { "type": "Point", "coordinates": [ 18.0086059, 69.2406173 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Eindhoven", "POP_MAX": 398053 }, "geometry": { "type": "Point", "coordinates": [ 5.5000154, 51.4299732 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Gjøvik", "POP_MAX": 22719 }, "geometry": { "type": "Point", "coordinates": [ 10.7000081, 60.8000214 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rørvik", "POP_MAX": 2615 }, "geometry": { "type": "Point", "coordinates": [ 11.2053003, 64.868016 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Shannon", "POP_MAX": 8781 }, "geometry": { "type": "Point", "coordinates": [ -8.8641466, 52.7038489 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Waterford", "POP_MAX": 49275 }, "geometry": { "type": "Point", "coordinates": [ -7.1119279, 52.2582947 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Tralee", "POP_MAX": 26384 }, "geometry": { "type": "Point", "coordinates": [ -9.7166527, 52.2666921 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Donegal", "POP_MAX": 2513 }, "geometry": { "type": "Point", "coordinates": [ -8.1166728, 54.6500092 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Modena", "POP_MAX": 175502 }, "geometry": { "type": "Point", "coordinates": [ 10.9199947, 44.6500252 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Crotone", "POP_MAX": 60010 }, "geometry": { "type": "Point", "coordinates": [ 17.123337, 39.0833366 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vibo Valentia", "POP_MAX": 33957 }, "geometry": { "type": "Point", "coordinates": [ 16.1000402, 38.666592 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Reggio di Calabria", "POP_MAX": 180353 }, "geometry": { "type": "Point", "coordinates": [ 15.6413602, 38.1149978 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Caserta", "POP_MAX": 250000 }, "geometry": { "type": "Point", "coordinates": [ 14.3373571, 41.0599601 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Barletta", "POP_MAX": 107830 }, "geometry": { "type": "Point", "coordinates": [ 16.270004, 41.319996 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ragusa", "POP_MAX": 68956 }, "geometry": { "type": "Point", "coordinates": [ 14.7299947, 36.9300314 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Asti", "POP_MAX": 71276 }, "geometry": { "type": "Point", "coordinates": [ 8.2099792, 44.9299823 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Novara", "POP_MAX": 100910 }, "geometry": { "type": "Point", "coordinates": [ 8.61998, 45.4500023 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Como", "POP_MAX": 250000 }, "geometry": { "type": "Point", "coordinates": [ 9.0800036, 45.8100061 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Udine", "POP_MAX": 119009 }, "geometry": { "type": "Point", "coordinates": [ 13.2400081, 46.0700161 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Treviso", "POP_MAX": 177309 }, "geometry": { "type": "Point", "coordinates": [ 12.2400175, 45.6700147 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Annecy", "POP_MAX": 105749 }, "geometry": { "type": "Point", "coordinates": [ 6.1166703, 45.8999748 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Roanne", "POP_MAX": 73315 }, "geometry": { "type": "Point", "coordinates": [ 4.0666662, 46.0333258 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bielefeld", "POP_MAX": 331906 }, "geometry": { "type": "Point", "coordinates": [ 8.5300114, 52.0299882 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dortmund", "POP_MAX": 588462 }, "geometry": { "type": "Point", "coordinates": [ 7.4500256, 51.5299671 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Duisburg", "POP_MAX": 1276757 }, "geometry": { "type": "Point", "coordinates": [ 6.7500166, 51.4299732 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Wuppertal", "POP_MAX": 776525 }, "geometry": { "type": "Point", "coordinates": [ 7.169991, 51.25001 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Essen", "POP_MAX": 1742135 }, "geometry": { "type": "Point", "coordinates": [ 7.0166154, 51.4499978 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Karlsruhe", "POP_MAX": 377487 }, "geometry": { "type": "Point", "coordinates": [ 8.3999934, 48.9999923 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Heidelberg", "POP_MAX": 426590 }, "geometry": { "type": "Point", "coordinates": [ 8.6999751, 49.4199925 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kassel", "POP_MAX": 289924 }, "geometry": { "type": "Point", "coordinates": [ 9.5000297, 51.3000069 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Oldenburg", "POP_MAX": 167458 }, "geometry": { "type": "Point", "coordinates": [ 8.2200044, 53.1299986 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Emden", "POP_MAX": 51526 }, "geometry": { "type": "Point", "coordinates": [ 7.2166548, 53.3666767 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Braunschweig", "POP_MAX": 244715 }, "geometry": { "type": "Point", "coordinates": [ 10.5000203, 52.2499748 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Erfurt", "POP_MAX": 203254 }, "geometry": { "type": "Point", "coordinates": [ 11.0299621, 50.9700529 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Coburg", "POP_MAX": 61054 }, "geometry": { "type": "Point", "coordinates": [ 10.9666068, 50.2666075 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Augsburg", "POP_MAX": 358989 }, "geometry": { "type": "Point", "coordinates": [ 10.8999959, 48.3500061 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Fürth", "POP_MAX": 237844 }, "geometry": { "type": "Point", "coordinates": [ 10.9999898, 49.4700153 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Chemnitz", "POP_MAX": 302643 }, "geometry": { "type": "Point", "coordinates": [ 12.919976, 50.8299839 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Roura", "POP_MAX": 2229 }, "geometry": { "type": "Point", "coordinates": [ -52.3300206, 4.7299813 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sinnamary", "POP_MAX": 3180 }, "geometry": { "type": "Point", "coordinates": [ -52.9599821, 5.3800191 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "St.-Brieuc", "POP_MAX": 53223 }, "geometry": { "type": "Point", "coordinates": [ -2.7833033, 48.5166626 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Poitier", "POP_MAX": 85960 }, "geometry": { "type": "Point", "coordinates": [ 0.3332765, 46.5832923 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Angers", "POP_MAX": 188380 }, "geometry": { "type": "Point", "coordinates": [ -0.5300299, 47.4800075 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Biarritz", "POP_MAX": 145348 }, "geometry": { "type": "Point", "coordinates": [ -1.5615949, 43.4732754 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Aix-en-Provence", "POP_MAX": 146821 }, "geometry": { "type": "Point", "coordinates": [ 5.4499926, 43.5199909 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Perpignan", "POP_MAX": 146620 }, "geometry": { "type": "Point", "coordinates": [ 2.8999674, 42.6999892 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Tarbes", "POP_MAX": 54854 }, "geometry": { "type": "Point", "coordinates": [ 0.0833435, 43.23329 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Clermont-Ferrand", "POP_MAX": 233050 }, "geometry": { "type": "Point", "coordinates": [ 3.0800081, 45.7799821 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Melun", "POP_MAX": 249432 }, "geometry": { "type": "Point", "coordinates": [ 2.6666483, 48.5333024 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Arras", "POP_MAX": 64165 }, "geometry": { "type": "Point", "coordinates": [ 2.7833337, 50.2833248 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Besançon", "POP_MAX": 128426 }, "geometry": { "type": "Point", "coordinates": [ 6.0300089, 47.229997 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Savonlinna", "POP_MAX": 27353 }, "geometry": { "type": "Point", "coordinates": [ 28.8833427, 61.8666229 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Pori", "POP_MAX": 76772 }, "geometry": { "type": "Point", "coordinates": [ 21.7749393, 61.4788947 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Viborg", "POP_MAX": 34831 }, "geometry": { "type": "Point", "coordinates": [ 9.3999841, 56.433337 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Roskilde", "POP_MAX": 44285 }, "geometry": { "type": "Point", "coordinates": [ 12.0833345, 55.649974 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Gent", "POP_MAX": 444336 }, "geometry": { "type": "Point", "coordinates": [ 3.7000219, 51.0299976 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Wiener Neustadt", "POP_MAX": 82762 }, "geometry": { "type": "Point", "coordinates": [ 16.2499536, 47.8159819 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Liège", "POP_MAX": 749110 }, "geometry": { "type": "Point", "coordinates": [ 5.5800105, 50.6299962 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Fort William", "POP_MAX": 9652 }, "geometry": { "type": "Point", "coordinates": [ -5.1120758, 56.8164779 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Almería", "POP_MAX": 179405 }, "geometry": { "type": "Point", "coordinates": [ -2.4299915, 36.8303475 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Málaga", "POP_MAX": 550058 }, "geometry": { "type": "Point", "coordinates": [ -4.4199992, 36.7204059 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Jaén", "POP_MAX": 116400 }, "geometry": { "type": "Point", "coordinates": [ -3.7999854, 37.7703935 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Huelva", "POP_MAX": 144174 }, "geometry": { "type": "Point", "coordinates": [ -6.9299494, 37.2503736 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Albacete", "POP_MAX": 158094 }, "geometry": { "type": "Point", "coordinates": [ -1.8699998, 39.0003443 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Toledo", "POP_MAX": 74632 }, "geometry": { "type": "Point", "coordinates": [ -4.0167164, 39.8670355 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Guadalajara", "POP_MAX": 72850 }, "geometry": { "type": "Point", "coordinates": [ -3.1665874, 40.6337071 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Santander", "POP_MAX": 208763 }, "geometry": { "type": "Point", "coordinates": [ -3.7999854, 43.3804645 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Salamanca", "POP_MAX": 162353 }, "geometry": { "type": "Point", "coordinates": [ -5.6700004, 40.9704049 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Burgos", "POP_MAX": 170183 }, "geometry": { "type": "Point", "coordinates": [ -3.6799669, 42.3503982 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Tarragona", "POP_MAX": 126291 }, "geometry": { "type": "Point", "coordinates": [ 1.2499906, 41.1203699 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Luzern", "POP_MAX": 250000 }, "geometry": { "type": "Point", "coordinates": [ 8.2800008, 47.0504214 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lugano", "POP_MAX": 105388 }, "geometry": { "type": "Point", "coordinates": [ 8.9666772, 46.0003821 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bollnäs", "POP_MAX": 13398 }, "geometry": { "type": "Point", "coordinates": [ 16.3665873, 61.3520032 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Gävle", "POP_MAX": 68635 }, "geometry": { "type": "Point", "coordinates": [ 17.1666418, 60.6669804 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kalmar", "POP_MAX": 35024 }, "geometry": { "type": "Point", "coordinates": [ 16.3665873, 56.6670178 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Växjö", "POP_MAX": 59600 }, "geometry": { "type": "Point", "coordinates": [ 14.8167077, 56.8836971 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Örebro", "POP_MAX": 98573 }, "geometry": { "type": "Point", "coordinates": [ 15.2199906, 59.2803467 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Norrköping", "POP_MAX": 88639 }, "geometry": { "type": "Point", "coordinates": [ 16.1786918, 58.5954273 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Halmstad", "POP_MAX": 55657 }, "geometry": { "type": "Point", "coordinates": [ 12.8555871, 56.6717721 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Karlstad", "POP_MAX": 74141 }, "geometry": { "type": "Point", "coordinates": [ 13.4999406, 59.3671373 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Skellefteå", "POP_MAX": 31311 }, "geometry": { "type": "Point", "coordinates": [ 20.9500284, 64.7720787 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Visby", "POP_MAX": 22593 }, "geometry": { "type": "Point", "coordinates": [ 18.3000093, 57.6336513 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Egilsstaðir", "POP_MAX": 2265 }, "geometry": { "type": "Point", "coordinates": [ -14.3949976, 65.2674231 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sauðárkrókur", "POP_MAX": 2682 }, "geometry": { "type": "Point", "coordinates": [ -19.6389928, 65.746412 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Selfoss", "POP_MAX": 6275 }, "geometry": { "type": "Point", "coordinates": [ -20.996946, 63.9334219 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lorca", "POP_MAX": 86119 }, "geometry": { "type": "Point", "coordinates": [ -1.6985116, 37.6885639 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cartagena", "POP_MAX": 201274 }, "geometry": { "type": "Point", "coordinates": [ -0.9800283, 37.6004297 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Oviedo", "POP_MAX": 235651 }, "geometry": { "type": "Point", "coordinates": [ -5.8299907, 43.3504922 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Santiago de Compostela", "POP_MAX": 92430 }, "geometry": { "type": "Point", "coordinates": [ -8.5410914, 42.882898 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Badajoz", "POP_MAX": 140133 }, "geometry": { "type": "Point", "coordinates": [ -6.9699728, 38.8804291 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Logroño", "POP_MAX": 143698 }, "geometry": { "type": "Point", "coordinates": [ -2.4299915, 42.470365 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "San Sebastián", "POP_MAX": 357468 }, "geometry": { "type": "Point", "coordinates": [ -1.9799931, 43.3203906 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ayr", "POP_MAX": 69042 }, "geometry": { "type": "Point", "coordinates": [ -4.6166797, 55.4503996 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Aberdeen", "POP_MAX": 189364 }, "geometry": { "type": "Point", "coordinates": [ -2.105049991692299, 57.145133499698055 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Perth", "POP_MAX": 39654 }, "geometry": { "type": "Point", "coordinates": [ -3.43637522000611, 56.392608950345803 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dundee", "POP_MAX": 151592 }, "geometry": { "type": "Point", "coordinates": [ -3.0000084, 56.470389 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Middlesbrough", "POP_MAX": 416042 }, "geometry": { "type": "Point", "coordinates": [ -1.2300131, 54.5803752 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Coventry", "POP_MAX": 388271 }, "geometry": { "type": "Point", "coordinates": [ -1.502674527924457, 52.40074087605872 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bath", "POP_MAX": 93238 }, "geometry": { "type": "Point", "coordinates": [ -2.3500222, 51.3837486 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Exeter", "POP_MAX": 113118 }, "geometry": { "type": "Point", "coordinates": [ -3.5299502, 50.7004053 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cambridge", "POP_MAX": 128488 }, "geometry": { "type": "Point", "coordinates": [ 0.1166231, 52.2003913 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kingston upon Hull", "POP_MAX": 302296 }, "geometry": { "type": "Point", "coordinates": [ -0.3299905, 53.7504258 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Londonderry/Derry", "POP_MAX": 83652 }, "geometry": { "type": "Point", "coordinates": [ -7.3332839, 55.0003754 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lisburn", "POP_MAX": 12899 }, "geometry": { "type": "Point", "coordinates": [ -6.047722990732365, 54.510340081278031 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Penzance", "POP_MAX": 20812 }, "geometry": { "type": "Point", "coordinates": [ -5.5500336, 50.1337215 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "York", "POP_MAX": 158947 }, "geometry": { "type": "Point", "coordinates": [ -1.072104058604134, 53.951168062269403 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Blackpool", "POP_MAX": 272792 }, "geometry": { "type": "Point", "coordinates": [ -3.0500053, 53.8303951 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dumfries", "POP_MAX": 31044 }, "geometry": { "type": "Point", "coordinates": [ -3.5500007, 55.0670897 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Scarborough", "POP_MAX": 70571 }, "geometry": { "type": "Point", "coordinates": [ -0.4299844, 54.2803935 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Plymouth", "POP_MAX": 247297 }, "geometry": { "type": "Point", "coordinates": [ -4.1599893, 50.3853858 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ipswich", "POP_MAX": 143767 }, "geometry": { "type": "Point", "coordinates": [ 1.1699955, 52.0703475 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Norwich", "POP_MAX": 190756 }, "geometry": { "type": "Point", "coordinates": [ 1.3000134, 52.630365 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Brighton", "POP_MAX": 503008 }, "geometry": { "type": "Point", "coordinates": [ -0.1699744, 50.8303457 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kirkwall", "POP_MAX": 8500 }, "geometry": { "type": "Point", "coordinates": [ -2.9500114, 58.9669808 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Inverness", "POP_MAX": 45158 }, "geometry": { "type": "Point", "coordinates": [ -4.2332664, 57.467124 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Oxford", "POP_MAX": 192796 }, "geometry": { "type": "Point", "coordinates": [ -1.248076337369831, 51.751827978066444 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Luton", "POP_MAX": 235958 }, "geometry": { "type": "Point", "coordinates": [ -0.4200108, 51.8803591 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Portsmouth", "POP_MAX": 442252 }, "geometry": { "type": "Point", "coordinates": [ -1.0800222, 50.8003475 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Peterborough", "POP_MAX": 140141 }, "geometry": { "type": "Point", "coordinates": [ -0.248404030339169, 52.567187150649296 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nottingham", "POP_MAX": 825600 }, "geometry": { "type": "Point", "coordinates": [ -1.165706334543335, 52.941084202003999 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Stoke", "POP_MAX": 390801 }, "geometry": { "type": "Point", "coordinates": [ -2.1800068, 53.0003683 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dover", "POP_MAX": 36384 }, "geometry": { "type": "Point", "coordinates": [ 1.3000134, 51.1337122 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lausanne", "POP_MAX": 265702 }, "geometry": { "type": "Point", "coordinates": [ 6.6500227, 46.5304273 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Basel", "POP_MAX": 830000 }, "geometry": { "type": "Point", "coordinates": [ 7.590017, 47.580389 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Trollhättan", "POP_MAX": 44543 }, "geometry": { "type": "Point", "coordinates": [ 12.2999621, 58.2671011 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Borås", "POP_MAX": 65008 }, "geometry": { "type": "Point", "coordinates": [ 12.939247443030592, 57.717756121714984 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kristianstad", "POP_MAX": 32188 }, "geometry": { "type": "Point", "coordinates": [ 14.1332869, 56.0336715 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Helsingborg", "POP_MAX": 91304 }, "geometry": { "type": "Point", "coordinates": [ 12.723269742553532, 56.041291180968074 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Alicante", "POP_MAX": 315863 }, "geometry": { "type": "Point", "coordinates": [ -0.4836407, 38.3512199 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Castello", "POP_MAX": 180610 }, "geometry": { "type": "Point", "coordinates": [ -0.0500076, 39.9704142 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Leeuwarden", "POP_MAX": 125778 }, "geometry": { "type": "Point", "coordinates": [ 5.7833573, 53.2503788 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Groningen", "POP_MAX": 216688 }, "geometry": { "type": "Point", "coordinates": [ 6.5800012, 53.2204065 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Harstad", "POP_MAX": 19433 }, "geometry": { "type": "Point", "coordinates": [ 16.5155704, 68.7879059 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Utrecht", "POP_MAX": 640000 }, "geometry": { "type": "Point", "coordinates": [ 5.1200386, 52.1003457 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ålesund", "POP_MAX": 47772 }, "geometry": { "type": "Point", "coordinates": [ 6.263280014851641, 62.459799139398143 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sandnes", "POP_MAX": 46911 }, "geometry": { "type": "Point", "coordinates": [ 5.6900297, 58.845412 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Drammen", "POP_MAX": 90722 }, "geometry": { "type": "Point", "coordinates": [ 10.199231839963424, 59.738481129257444 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Moss", "POP_MAX": 36901 }, "geometry": { "type": "Point", "coordinates": [ 10.6691573, 59.436978 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Steinkjer", "POP_MAX": 11274 }, "geometry": { "type": "Point", "coordinates": [ 11.5000109, 64.0170602 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Haarlem", "POP_MAX": 349957 }, "geometry": { "type": "Point", "coordinates": [ 4.629991, 52.3804319 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Saint-Georges", "POP_MAX": 2742 }, "geometry": { "type": "Point", "coordinates": [ -51.8100007, 3.9104706 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Drogheda", "POP_MAX": 36533 }, "geometry": { "type": "Point", "coordinates": [ -6.350462402562247, 53.708886789164069 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dundalk", "POP_MAX": 38884 }, "geometry": { "type": "Point", "coordinates": [ -6.395592071318646, 53.999796075155913 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Galway", "POP_MAX": 75594 }, "geometry": { "type": "Point", "coordinates": [ -9.0488123, 53.272393 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kilkenny", "POP_MAX": 21589 }, "geometry": { "type": "Point", "coordinates": [ -7.2522553, 52.6545496 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Killarney", "POP_MAX": 11902 }, "geometry": { "type": "Point", "coordinates": [ -9.5166649, 52.0504004 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sligo", "POP_MAX": 20228 }, "geometry": { "type": "Point", "coordinates": [ -8.4833171, 54.267061 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Parma", "POP_MAX": 166011 }, "geometry": { "type": "Point", "coordinates": [ 10.3200313, 44.8104289 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ravenna", "POP_MAX": 134631 }, "geometry": { "type": "Point", "coordinates": [ 12.2200187, 44.4203752 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ferrara", "POP_MAX": 130992 }, "geometry": { "type": "Point", "coordinates": [ 11.6099267, 44.8504265 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bologna", "POP_MAX": 488172 }, "geometry": { "type": "Point", "coordinates": [ 11.3400207, 44.500422 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Olbia", "POP_MAX": 45366 }, "geometry": { "type": "Point", "coordinates": [ 9.5150719, 40.9142849 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cagliari", "POP_MAX": 291511 }, "geometry": { "type": "Point", "coordinates": [ 9.1039815, 39.2223979 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Pisa", "POP_MAX": 203336 }, "geometry": { "type": "Point", "coordinates": [ 10.4000264, 43.7204696 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Livorno", "POP_MAX": 156274 }, "geometry": { "type": "Point", "coordinates": [ 10.3022747, 43.5511337 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Siena", "POP_MAX": 52625 }, "geometry": { "type": "Point", "coordinates": [ 11.3499943, 43.3170317 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Arezzo", "POP_MAX": 91589 }, "geometry": { "type": "Point", "coordinates": [ 11.8749751, 43.4617257 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Catanzaro", "POP_MAX": 95251 }, "geometry": { "type": "Point", "coordinates": [ 16.6000097, 38.9003762 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Salerno", "POP_MAX": 954265 }, "geometry": { "type": "Point", "coordinates": [ 14.7699406, 40.6803967 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Benevento", "POP_MAX": 61791 }, "geometry": { "type": "Point", "coordinates": [ 14.7499934, 41.1337024 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bari", "POP_MAX": 500577 }, "geometry": { "type": "Point", "coordinates": [ 16.8727579, 41.1142204 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Foggia", "POP_MAX": 155203 }, "geometry": { "type": "Point", "coordinates": [ 15.5599698, 41.4604783 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lecce", "POP_MAX": 162582 }, "geometry": { "type": "Point", "coordinates": [ 18.1499926, 40.3603904 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Brindisi", "POP_MAX": 104437 }, "geometry": { "type": "Point", "coordinates": [ 17.9300061, 40.6403475 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Taranto", "POP_MAX": 202033 }, "geometry": { "type": "Point", "coordinates": [ 17.2299971, 40.5083917 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Messina", "POP_MAX": 252026 }, "geometry": { "type": "Point", "coordinates": [ 15.5499963, 38.2004706 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Marsala", "POP_MAX": 77784 }, "geometry": { "type": "Point", "coordinates": [ 12.4386617, 37.8054043 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Siracusa", "POP_MAX": 123657 }, "geometry": { "type": "Point", "coordinates": [ 15.2899605, 37.0703587 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Pescara", "POP_MAX": 314789 }, "geometry": { "type": "Point", "coordinates": [ 14.2186564, 42.4554305 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "L'Aquila", "POP_MAX": 68503 }, "geometry": { "type": "Point", "coordinates": [ 13.3900248, 42.3503982 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Civitavecchia", "POP_MAX": 61316 }, "geometry": { "type": "Point", "coordinates": [ 11.7999926, 42.1004134 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ancona", "POP_MAX": 100507 }, "geometry": { "type": "Point", "coordinates": [ 13.4999406, 43.6003736 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Perugia", "POP_MAX": 149125 }, "geometry": { "type": "Point", "coordinates": [ 12.3899825, 43.1103776 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bergamo", "POP_MAX": 200000 }, "geometry": { "type": "Point", "coordinates": [ 9.6699934, 45.7004004 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Trieste", "POP_MAX": 216035 }, "geometry": { "type": "Point", "coordinates": [ 13.8000256, 45.6503776 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bolzano", "POP_MAX": 95895 }, "geometry": { "type": "Point", "coordinates": [ 11.3600195, 46.5004291 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Trento", "POP_MAX": 107808 }, "geometry": { "type": "Point", "coordinates": [ 11.1199825, 46.0804289 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Verona", "POP_MAX": 347459 }, "geometry": { "type": "Point", "coordinates": [ 10.9900162, 45.4403904 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Saint-Étienne", "POP_MAX": 265684 }, "geometry": { "type": "Point", "coordinates": [ 4.3800321, 45.4303911 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Grenoble", "POP_MAX": 388574 }, "geometry": { "type": "Point", "coordinates": [ 5.720002, 45.1803805 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Fort-de-France", "POP_MAX": 253995 }, "geometry": { "type": "Point", "coordinates": [ -61.0800291, 14.6104118 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bonn", "POP_MAX": 680543 }, "geometry": { "type": "Point", "coordinates": [ 7.0800223, 50.7204557 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Münster", "POP_MAX": 270184 }, "geometry": { "type": "Point", "coordinates": [ 7.6200411, 51.9704053 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Düsseldorf", "POP_MAX": 1220000 }, "geometry": { "type": "Point", "coordinates": [ 6.779989, 51.2203736 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ulm", "POP_MAX": 172955 }, "geometry": { "type": "Point", "coordinates": [ 9.9999991, 48.4003906 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mannheim", "POP_MAX": 2362000 }, "geometry": { "type": "Point", "coordinates": [ 8.470015, 49.5003752 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Freiburg", "POP_MAX": 254889 }, "geometry": { "type": "Point", "coordinates": [ 7.8699483, 48.0004151 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Gießen", "POP_MAX": 82358 }, "geometry": { "type": "Point", "coordinates": [ 8.650004, 50.5837199 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Wiesbaden", "POP_MAX": 617126 }, "geometry": { "type": "Point", "coordinates": [ 8.2500284, 50.0803915 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bremerhaven", "POP_MAX": 137751 }, "geometry": { "type": "Point", "coordinates": [ 8.5799825, 53.550438 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Osnabrück", "POP_MAX": 231268 }, "geometry": { "type": "Point", "coordinates": [ 8.049989, 52.280438 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hanover", "POP_MAX": 722490 }, "geometry": { "type": "Point", "coordinates": [ 9.7166573, 52.3669702 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Göttingen", "POP_MAX": 139419 }, "geometry": { "type": "Point", "coordinates": [ 9.920004, 51.5204328 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Gera", "POP_MAX": 104659 }, "geometry": { "type": "Point", "coordinates": [ 12.070002, 50.8703691 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Jena", "POP_MAX": 104712 }, "geometry": { "type": "Point", "coordinates": [ 11.5800061, 50.9304429 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Flensburg", "POP_MAX": 97930 }, "geometry": { "type": "Point", "coordinates": [ 9.4333154, 54.7837478 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lübeck", "POP_MAX": 235390 }, "geometry": { "type": "Point", "coordinates": [ 10.6699841, 53.8703927 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kiel", "POP_MAX": 269427 }, "geometry": { "type": "Point", "coordinates": [ 10.130017, 54.3303904 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Koblenz", "POP_MAX": 312633 }, "geometry": { "type": "Point", "coordinates": [ 7.5999906, 50.3504783 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Saarbrücken", "POP_MAX": 770001 }, "geometry": { "type": "Point", "coordinates": [ 6.9700032, 49.2503904 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Regensburg", "POP_MAX": 164359 }, "geometry": { "type": "Point", "coordinates": [ 12.1200248, 49.0204045 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rosenheim", "POP_MAX": 92809 }, "geometry": { "type": "Point", "coordinates": [ 12.1333056, 47.8503467 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hof", "POP_MAX": 56153 }, "geometry": { "type": "Point", "coordinates": [ 11.916678, 50.3170437 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Würzburg", "POP_MAX": 168561 }, "geometry": { "type": "Point", "coordinates": [ 9.950028, 49.8004344 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ingolstadt", "POP_MAX": 163325 }, "geometry": { "type": "Point", "coordinates": [ 11.4499882, 48.7704197 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cottbus", "POP_MAX": 105067 }, "geometry": { "type": "Point", "coordinates": [ 14.3299674, 51.7704175 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Potsdam", "POP_MAX": 218095 }, "geometry": { "type": "Point", "coordinates": [ 13.0699926, 52.4004049 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Magdeburg", "POP_MAX": 229826 }, "geometry": { "type": "Point", "coordinates": [ 11.6200036, 52.1304214 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Leipzig", "POP_MAX": 542529 }, "geometry": { "type": "Point", "coordinates": [ 12.4099812, 51.3354053 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Saint-Laurent-du-Maroni", "POP_MAX": 24287 }, "geometry": { "type": "Point", "coordinates": [ -54.0325346, 5.4976241 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Iracoubo", "POP_MAX": 1536 }, "geometry": { "type": "Point", "coordinates": [ -53.2199921, 5.4804265 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cherbourg", "POP_MAX": 60991 }, "geometry": { "type": "Point", "coordinates": [ -1.6499874, 49.6503919 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Caen", "POP_MAX": 190099 }, "geometry": { "type": "Point", "coordinates": [ -0.3499893, 49.1837537 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lorient", "POP_MAX": 84952 }, "geometry": { "type": "Point", "coordinates": [ -3.3665752, 47.7504045 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Brest", "POP_MAX": 144899 }, "geometry": { "type": "Point", "coordinates": [ -4.4950076, 48.3904429 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Le Mans", "POP_MAX": 144515 }, "geometry": { "type": "Point", "coordinates": [ 0.202581510662092, 48.004390876355409 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nantes", "POP_MAX": 438537 }, "geometry": { "type": "Point", "coordinates": [ -1.5900169, 47.2103858 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Agen", "POP_MAX": 58223 }, "geometry": { "type": "Point", "coordinates": [ 0.6333357, 44.2004144 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ajaccio", "POP_MAX": 54364 }, "geometry": { "type": "Point", "coordinates": [ 8.7282938, 41.9270648 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bastia", "POP_MAX": 41001 }, "geometry": { "type": "Point", "coordinates": [ 9.4500069, 42.7031673 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Toulon", "POP_MAX": 357693 }, "geometry": { "type": "Point", "coordinates": [ 5.9188216, 43.1341865 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Béziers", "POP_MAX": 81438 }, "geometry": { "type": "Point", "coordinates": [ 3.2099743, 43.3504922 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Montpellier", "POP_MAX": 327254 }, "geometry": { "type": "Point", "coordinates": [ 3.8699857, 43.6103988 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nîmes", "POP_MAX": 169547 }, "geometry": { "type": "Point", "coordinates": [ 4.3500081, 43.8303854 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vichy", "POP_MAX": 43158 }, "geometry": { "type": "Point", "coordinates": [ 3.4166801, 46.117145 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nevers", "POP_MAX": 45929 }, "geometry": { "type": "Point", "coordinates": [ 3.1666695, 46.9837329 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Auxerre", "POP_MAX": 41516 }, "geometry": { "type": "Point", "coordinates": [ 3.5665934, 47.8004273 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dijon", "POP_MAX": 169946 }, "geometry": { "type": "Point", "coordinates": [ 5.0300183, 47.3304043 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bourges", "POP_MAX": 72340 }, "geometry": { "type": "Point", "coordinates": [ 2.3999979, 47.0837268 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Tours", "POP_MAX": 236096 }, "geometry": { "type": "Point", "coordinates": [ 0.6999467, 47.3803754 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Orléans", "POP_MAX": 217301 }, "geometry": { "type": "Point", "coordinates": [ 1.9000284, 47.9004212 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dieppe", "POP_MAX": 42461 }, "geometry": { "type": "Point", "coordinates": [ 1.0833341, 49.9337337 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rouen", "POP_MAX": 532559 }, "geometry": { "type": "Point", "coordinates": [ 1.0799751, 49.4304053 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Versailles", "POP_MAX": 85416 }, "geometry": { "type": "Point", "coordinates": [ 2.1333475, 48.8004696 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Brive", "POP_MAX": 55448 }, "geometry": { "type": "Point", "coordinates": [ 1.5333325, 45.1504081 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Troyes", "POP_MAX": 61703 }, "geometry": { "type": "Point", "coordinates": [ 4.0833577, 48.3403943 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Reims", "POP_MAX": 196565 }, "geometry": { "type": "Point", "coordinates": [ 4.029976, 49.2503904 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Calais", "POP_MAX": 92201 }, "geometry": { "type": "Point", "coordinates": [ 1.8333142, 50.9504159 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Amiens", "POP_MAX": 143086 }, "geometry": { "type": "Point", "coordinates": [ 2.300004, 49.9003766 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mulhouse", "POP_MAX": 215454 }, "geometry": { "type": "Point", "coordinates": [ 7.34998, 47.7504045 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nancy", "POP_MAX": 268976 }, "geometry": { "type": "Point", "coordinates": [ 6.2000244, 48.6836808 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Metz", "POP_MAX": 409186 }, "geometry": { "type": "Point", "coordinates": [ 6.1800256, 49.1203467 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Stralsund", "POP_MAX": 61368 }, "geometry": { "type": "Point", "coordinates": [ 13.1000166, 54.3004181 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rostock", "POP_MAX": 203080 }, "geometry": { "type": "Point", "coordinates": [ 12.1499971, 54.0703805 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sodankylä", "POP_MAX": 8942 }, "geometry": { "type": "Point", "coordinates": [ 26.6000195, 67.4170593 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Jyväskylä", "POP_MAX": 98136 }, "geometry": { "type": "Point", "coordinates": [ 25.7499939, 62.2603457 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kuopio", "POP_MAX": 91900 }, "geometry": { "type": "Point", "coordinates": [ 27.6949397, 62.8942863 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lappeenranta", "POP_MAX": 59276 }, "geometry": { "type": "Point", "coordinates": [ 28.1833337, 61.0670593 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Porvoo", "POP_MAX": 12242 }, "geometry": { "type": "Point", "coordinates": [ 25.6660197, 60.4003559 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Svendborg", "POP_MAX": 29180 }, "geometry": { "type": "Point", "coordinates": [ 10.616654, 55.0704228 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Odense", "POP_MAX": 158222 }, "geometry": { "type": "Point", "coordinates": [ 10.3833349, 55.4003768 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Esbjerg", "POP_MAX": 72205 }, "geometry": { "type": "Point", "coordinates": [ 8.4500162, 55.4670394 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Frederikshavn", "POP_MAX": 24103 }, "geometry": { "type": "Point", "coordinates": [ 10.5332999, 57.4336894 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Aalborg", "POP_MAX": 122219 }, "geometry": { "type": "Point", "coordinates": [ 9.9165934, 57.0337138 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Pointe-à-Pitre", "POP_MAX": 145511 }, "geometry": { "type": "Point", "coordinates": [ -61.5329989, 16.241475 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Basse-terre", "POP_MAX": 307 }, "geometry": { "type": "Point", "coordinates": [ -61.7054837, 16.0104101 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "St.-Benoit", "POP_MAX": 35310 }, "geometry": { "type": "Point", "coordinates": [ 55.7128161, -21.0335107 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Brugge", "POP_MAX": 146469 }, "geometry": { "type": "Point", "coordinates": [ 3.2300248, 51.2203736 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Namur", "POP_MAX": 106284 }, "geometry": { "type": "Point", "coordinates": [ 4.870028, 50.4703935 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Charleroi", "POP_MAX": 345367 }, "geometry": { "type": "Point", "coordinates": [ 4.450002, 50.4203965 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Graz", "POP_MAX": 263234 }, "geometry": { "type": "Point", "coordinates": [ 15.4100048, 47.0777582 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Klagenfurt", "POP_MAX": 90610 }, "geometry": { "type": "Point", "coordinates": [ 14.3100203, 46.6203443 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Linz", "POP_MAX": 349161 }, "geometry": { "type": "Point", "coordinates": [ 14.2887813, 48.3192328 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Passau", "POP_MAX": 50560 }, "geometry": { "type": "Point", "coordinates": [ 13.4411788, 48.5754623 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Salzburg", "POP_MAX": 206279 }, "geometry": { "type": "Point", "coordinates": [ 13.0400203, 47.8104783 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Innsbruck", "POP_MAX": 155214 }, "geometry": { "type": "Point", "coordinates": [ 11.4099906, 47.2804073 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Arrecife", "POP_MAX": 52944 }, "geometry": { "type": "Point", "coordinates": [ -13.5378328, 28.9690492 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dzaoudzi", "POP_MAX": 32057 }, "geometry": { "type": "Point", "coordinates": [ 45.2750036, -12.787089 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cádiz", "POP_MAX": 283157 }, "geometry": { "type": "Point", "coordinates": [ -6.2861410092129, 36.52482926254671 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Granada", "POP_MAX": 388290 }, "geometry": { "type": "Point", "coordinates": [ -3.5850114, 37.1649783 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Jönköping", "POP_MAX": 89780 }, "geometry": { "type": "Point", "coordinates": [ 14.1650162, 57.7713432 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Örnsköldsvik", "POP_MAX": 27749 }, "geometry": { "type": "Point", "coordinates": [ 18.7166764, 63.3180072 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Höfn", "POP_MAX": 1695 }, "geometry": { "type": "Point", "coordinates": [ -15.2138595, 64.2723151 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Murcia", "POP_MAX": 406807 }, "geometry": { "type": "Point", "coordinates": [ -1.1299675, 37.9799931 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ceuta", "POP_MAX": 78674 }, "geometry": { "type": "Point", "coordinates": [ -5.3069994, 35.8889838 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "La Coruña", "POP_MAX": 370610 }, "geometry": { "type": "Point", "coordinates": [ -8.4199876, 43.3299766 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ourense", "POP_MAX": 118107 }, "geometry": { "type": "Point", "coordinates": [ -7.8699954, 42.3299601 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Edinburgh", "POP_MAX": 504966 }, "geometry": { "type": "Point", "coordinates": [ -3.2190906, 55.9483279 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Newcastle", "POP_MAX": 882000 }, "geometry": { "type": "Point", "coordinates": [ -1.61162548933458, 54.989742053169572 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Liverpool", "POP_MAX": 811000 }, "geometry": { "type": "Point", "coordinates": [ -2.961934009816594, 53.405068298036525 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cardiff", "POP_MAX": 861400 }, "geometry": { "type": "Point", "coordinates": [ -3.167598195527729, 51.482619049130911 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Wick", "POP_MAX": 7147 }, "geometry": { "type": "Point", "coordinates": [ -3.0833625, 58.4332925 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Leeds", "POP_MAX": 1529000 }, "geometry": { "type": "Point", "coordinates": [ -1.551347711412841, 53.790016637752316 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Pamplona", "POP_MAX": 274545 }, "geometry": { "type": "Point", "coordinates": [ -1.6499874, 42.8200078 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Svolvær", "POP_MAX": 4197 }, "geometry": { "type": "Point", "coordinates": [ 14.5666971, 68.2332886 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Mo i Rana", "POP_MAX": 20409 }, "geometry": { "type": "Point", "coordinates": [ 14.1666699, 66.3166097 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Narvik", "POP_MAX": 20000 }, "geometry": { "type": "Point", "coordinates": [ 17.2899934, 68.3831502 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bodø", "POP_MAX": 34073 }, "geometry": { "type": "Point", "coordinates": [ 14.4292849, 67.2764346 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rotterdam", "POP_MAX": 1005000 }, "geometry": { "type": "Point", "coordinates": [ 4.4780285, 51.921915 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Luxembourg", "POP_MAX": 107260 }, "geometry": { "type": "Point", "coordinates": [ 6.1300028, 49.6116604 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Haugesund", "POP_MAX": 40321 }, "geometry": { "type": "Point", "coordinates": [ 5.2774967, 59.4119149 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Stavanger", "POP_MAX": 173132 }, "geometry": { "type": "Point", "coordinates": [ 5.6800044, 58.9700039 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Skien", "POP_MAX": 73330 }, "geometry": { "type": "Point", "coordinates": [ 9.6000236, 59.1999898 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Namsos", "POP_MAX": 9035 }, "geometry": { "type": "Point", "coordinates": [ 11.5000109, 64.4833108 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Alta", "POP_MAX": 12077 }, "geometry": { "type": "Point", "coordinates": [ 23.2416715, 69.9666453 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vadsø", "POP_MAX": 5139 }, "geometry": { "type": "Point", "coordinates": [ 29.7657493, 70.0965968 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cork", "POP_MAX": 188907 }, "geometry": { "type": "Point", "coordinates": [ -8.465109738576434, 51.892837601620471 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sassari", "POP_MAX": 120729 }, "geometry": { "type": "Point", "coordinates": [ 8.5700089, 40.7300061 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Turin", "POP_MAX": 1652000 }, "geometry": { "type": "Point", "coordinates": [ 7.6680146, 45.072333 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Stuttgart", "POP_MAX": 2944700 }, "geometry": { "type": "Point", "coordinates": [ 9.1999963, 48.7799799 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bremen", "POP_MAX": 724909 }, "geometry": { "type": "Point", "coordinates": [ 8.8000207, 53.0800016 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nürnberg", "POP_MAX": 737304 }, "geometry": { "type": "Point", "coordinates": [ 11.0799849, 49.4499907 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rennes", "POP_MAX": 209375 }, "geometry": { "type": "Point", "coordinates": [ -1.670012, 48.1000214 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Nice", "POP_MAX": 927000 }, "geometry": { "type": "Point", "coordinates": [ 7.2630781, 43.7169636 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Toulouse", "POP_MAX": 847000 }, "geometry": { "type": "Point", "coordinates": [ 1.4479809, 43.6219048 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Limoges", "POP_MAX": 152199 }, "geometry": { "type": "Point", "coordinates": [ 1.2499906, 45.8299791 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lille", "POP_MAX": 1044000 }, "geometry": { "type": "Point", "coordinates": [ 3.0780622, 50.651915 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Strasbourg", "POP_MAX": 439972 }, "geometry": { "type": "Point", "coordinates": [ 7.7500073, 48.5799662 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kemijärvi", "POP_MAX": 8883 }, "geometry": { "type": "Point", "coordinates": [ 27.4166621, 66.6666659 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kokkola", "POP_MAX": 46714 }, "geometry": { "type": "Point", "coordinates": [ 23.1166662, 63.8332988 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lahti", "POP_MAX": 98826 }, "geometry": { "type": "Point", "coordinates": [ 25.6649344, 60.9938597 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Joensuu", "POP_MAX": 53388 }, "geometry": { "type": "Point", "coordinates": [ 29.7666479, 62.599989 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Turku", "POP_MAX": 175945 }, "geometry": { "type": "Point", "coordinates": [ 22.2549617, 60.4538668 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Ísafjörður", "POP_MAX": 2534 }, "geometry": { "type": "Point", "coordinates": [ -23.1499671, 66.0833165 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Akureyri", "POP_MAX": 16563 }, "geometry": { "type": "Point", "coordinates": [ -18.1000169, 65.6665719 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Keflavík", "POP_MAX": 7930 }, "geometry": { "type": "Point", "coordinates": [ -22.5665918, 64.0166467 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Antwerpen", "POP_MAX": 920000 }, "geometry": { "type": "Point", "coordinates": [ 4.4130712, 51.2223194 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lerwick", "POP_MAX": 6594 }, "geometry": { "type": "Point", "coordinates": [ -1.1499921, 60.1500352 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Valladolid", "POP_MAX": 322304 }, "geometry": { "type": "Point", "coordinates": [ -4.7500308, 41.6500016 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Linköping", "POP_MAX": 96732 }, "geometry": { "type": "Point", "coordinates": [ 15.6299397, 58.4100122 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Östersund", "POP_MAX": 46178 }, "geometry": { "type": "Point", "coordinates": [ 14.6499996, 63.1833126 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kiruna", "POP_MAX": 18154 }, "geometry": { "type": "Point", "coordinates": [ 20.2166365, 67.8500045 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Umeå", "POP_MAX": 78197 }, "geometry": { "type": "Point", "coordinates": [ 20.2399943, 63.8299915 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Uppsala", "POP_MAX": 133117 }, "geometry": { "type": "Point", "coordinates": [ 17.6399979, 59.8600529 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Melilla", "POP_MAX": 141308 }, "geometry": { "type": "Point", "coordinates": [ -2.9500114, 35.3000016 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Palma", "POP_MAX": 375773 }, "geometry": { "type": "Point", "coordinates": [ 2.654246, 39.5742627 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Molde", "POP_MAX": 18594 }, "geometry": { "type": "Point", "coordinates": [ 7.1833235, 62.7483004 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lillehammer", "POP_MAX": 19542 }, "geometry": { "type": "Point", "coordinates": [ 10.5000203, 61.1332827 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kirkenes", "POP_MAX": 3282 }, "geometry": { "type": "Point", "coordinates": [ 30.0516434, 69.7250063 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Zaragoza", "POP_MAX": 649404 }, "geometry": { "type": "Point", "coordinates": [ -0.8899821, 41.6500016 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Göteborg", "POP_MAX": 537797 }, "geometry": { "type": "Point", "coordinates": [ 11.978630208072927, 57.709146768849784 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Limerick", "POP_MAX": 90054 }, "geometry": { "type": "Point", "coordinates": [ -8.6230502, 52.664704 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Genoa", "POP_MAX": 647497 }, "geometry": { "type": "Point", "coordinates": [ 8.9300386, 44.4099882 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cologne", "POP_MAX": 1004000 }, "geometry": { "type": "Point", "coordinates": [ 6.9480586, 50.9319495 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kourou", "POP_MAX": 24029 }, "geometry": { "type": "Point", "coordinates": [ -52.6499494, 5.1599809 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "La Rochelle", "POP_MAX": 76997 }, "geometry": { "type": "Point", "coordinates": [ -1.1499921, 46.166651 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kemi", "POP_MAX": 22641 }, "geometry": { "type": "Point", "coordinates": [ 24.5816931, 65.733312 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Oulu", "POP_MAX": 136752 }, "geometry": { "type": "Point", "coordinates": [ 25.4700109, 64.9999976 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Århus", "POP_MAX": 237551 }, "geometry": { "type": "Point", "coordinates": [ 10.210684, 56.157204 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Santa Cruz de Tenerife", "POP_MAX": 336061 }, "geometry": { "type": "Point", "coordinates": [ -16.2500007, 28.4699793 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Manchester", "POP_MAX": 2230000 }, "geometry": { "type": "Point", "coordinates": [ -2.248684667159885, 53.475319924724531 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Birmingham", "POP_MAX": 2285000 }, "geometry": { "type": "Point", "coordinates": [ -1.9219426, 52.4769198 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Belfast", "POP_MAX": 450406 }, "geometry": { "type": "Point", "coordinates": [ -5.928177644913072, 54.594245156841886 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Córdoba", "POP_MAX": 321376 }, "geometry": { "type": "Point", "coordinates": [ -4.7700037, 37.8799992 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Luleå", "POP_MAX": 48638 }, "geometry": { "type": "Point", "coordinates": [ 22.1583783, 65.5966348 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Sundsvall", "POP_MAX": 73389 }, "geometry": { "type": "Point", "coordinates": [ 17.3166585, 62.4000529 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vigo", "POP_MAX": 378952 }, "geometry": { "type": "Point", "coordinates": [ -8.7299945, 42.2200185 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bilbao", "POP_MAX": 875552 }, "geometry": { "type": "Point", "coordinates": [ -2.9299868, 43.2499815 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "The Hague", "POP_MAX": 1406000 }, "geometry": { "type": "Point", "coordinates": [ 4.2699613, 52.0800368 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Kristiansand", "POP_MAX": 63814 }, "geometry": { "type": "Point", "coordinates": [ 7.97498387982654, 58.145619609019022 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hammerfest", "POP_MAX": 10000 }, "geometry": { "type": "Point", "coordinates": [ 23.6880009, 70.6612799 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bern", "POP_MAX": 275329 }, "geometry": { "type": "Point", "coordinates": [ 7.4669755, 46.9166828 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Malmö", "POP_MAX": 269349 }, "geometry": { "type": "Point", "coordinates": [ 13.023059685006762, 55.599423954165587 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Florence", "POP_MAX": 1500000 }, "geometry": { "type": "Point", "coordinates": [ 11.2500004, 43.7800008 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Catania", "POP_MAX": 674542 }, "geometry": { "type": "Point", "coordinates": [ 15.0799991, 37.4999707 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dresden", "POP_MAX": 617515 }, "geometry": { "type": "Point", "coordinates": [ 13.7500028, 51.0499705 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bordeaux", "POP_MAX": 803000 }, "geometry": { "type": "Point", "coordinates": [ -0.5969589, 44.8519589 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Marseille", "POP_MAX": 1400000 }, "geometry": { "type": "Point", "coordinates": [ 5.3730643, 43.2919249 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Le Havre", "POP_MAX": 242124 }, "geometry": { "type": "Point", "coordinates": [ 0.1049701, 49.5049744 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rovaniemi", "POP_MAX": 34781 }, "geometry": { "type": "Point", "coordinates": [ 25.7159391, 66.5000352 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vaasa", "POP_MAX": 57014 }, "geometry": { "type": "Point", "coordinates": [ 21.6000146, 63.0999844 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Tampere", "POP_MAX": 259279 }, "geometry": { "type": "Point", "coordinates": [ 23.7500126, 61.5000045 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "St.-Denis", "POP_MAX": 190047 }, "geometry": { "type": "Point", "coordinates": [ 55.4480778, -20.8788948 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Venice", "POP_MAX": 270816 }, "geometry": { "type": "Point", "coordinates": [ 12.3349987, 45.4386593 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Las Palmas", "POP_MAX": 378495 }, "geometry": { "type": "Point", "coordinates": [ -15.429999, 28.099976 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Reykjavík", "POP_MAX": 166212 }, "geometry": { "type": "Point", "coordinates": [ -21.936546009025054, 64.143459463170331 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Glasgow", "POP_MAX": 1160000 }, "geometry": { "type": "Point", "coordinates": [ -4.239100528802634, 55.862269757992621 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Seville", "POP_MAX": 1212045 }, "geometry": { "type": "Point", "coordinates": [ -5.9800074, 37.4050153 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Tromsø", "POP_MAX": 52436 }, "geometry": { "type": "Point", "coordinates": [ 18.9920252, 69.6350762 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Trondheim", "POP_MAX": 147139 }, "geometry": { "type": "Point", "coordinates": [ 10.4166662, 63.4166575 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Bergen", "POP_MAX": 213585 }, "geometry": { "type": "Point", "coordinates": [ 5.3245223, 60.3910024 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Valencia", "POP_MAX": 808000 }, "geometry": { "type": "Point", "coordinates": [ -0.4019579, 39.4869634 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Palermo", "POP_MAX": 863000 }, "geometry": { "type": "Point", "coordinates": [ 13.3480814, 38.1269689 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Lyon", "POP_MAX": 1423000 }, "geometry": { "type": "Point", "coordinates": [ 4.8280846, 45.7719544 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Cayenne", "POP_MAX": 61550 }, "geometry": { "type": "Point", "coordinates": [ -52.3300206, 4.9329922 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Barcelona", "POP_MAX": 4920000 }, "geometry": { "type": "Point", "coordinates": [ 2.1814245, 41.3852454 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Zürich", "POP_MAX": 1108000 }, "geometry": { "type": "Point", "coordinates": [ 8.5480643, 47.3819337 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Oslo", "POP_MAX": 835000 }, "geometry": { "type": "Point", "coordinates": [ 10.7480333, 59.9186361 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Dublin", "POP_MAX": 1059000 }, "geometry": { "type": "Point", "coordinates": [ -6.256979517281132, 53.34673124898314 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Naples", "POP_MAX": 2250000 }, "geometry": { "type": "Point", "coordinates": [ 14.2430655, 40.8419711 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Milan", "POP_MAX": 2945000 }, "geometry": { "type": "Point", "coordinates": [ 9.2030631, 45.4719211 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Frankfurt", "POP_MAX": 2895000 }, "geometry": { "type": "Point", "coordinates": [ 8.6750154, 50.0999768 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Hamburg", "POP_MAX": 1757000 }, "geometry": { "type": "Point", "coordinates": [ 9.9980533, 53.5519705 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Munich", "POP_MAX": 1275000 }, "geometry": { "type": "Point", "coordinates": [ 11.5730476, 48.1318879 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Helsinki", "POP_MAX": 1115000 }, "geometry": { "type": "Point", "coordinates": [ 24.932456915043964, 60.163803849485681 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "København", "POP_MAX": 1085000 }, "geometry": { "type": "Point", "coordinates": [ 12.5615399, 55.68051 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Brussels", "POP_MAX": 1743000 }, "geometry": { "type": "Point", "coordinates": [ 4.3313707, 50.8352629 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Madrid", "POP_MAX": 5567000 }, "geometry": { "type": "Point", "coordinates": [ -3.6852975, 40.4019721 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Geneva", "POP_MAX": 1240000 }, "geometry": { "type": "Point", "coordinates": [ 6.140028, 46.2100075 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Stockholm", "POP_MAX": 1264000 }, "geometry": { "type": "Point", "coordinates": [ 18.066300168534497, 59.324127204007475 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Amsterdam", "POP_MAX": 1031000 }, "geometry": { "type": "Point", "coordinates": [ 4.9146943, 52.3519145 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Berlin", "POP_MAX": 3406000 }, "geometry": { "type": "Point", "coordinates": [ 13.3996028, 52.5237645 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Vienna", "POP_MAX": 2400000 }, "geometry": { "type": "Point", "coordinates": [ 16.3646931, 48.2019611 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "London", "POP_MAX": 8567000 }, "geometry": { "type": "Point", "coordinates": [ -0.1186677, 51.5019406 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Rome", "POP_MAX": 3339000 }, "geometry": { "type": "Point", "coordinates": [ 12.4813126, 41.8979015 ] } },
|
||||
{ "type": "Feature", "properties": { "NAME": "Paris", "POP_MAX": 9904000 }, "geometry": { "type": "Point", "coordinates": [ 2.352992461539213, 48.858092316269108 ] } }
|
||||
]
|
||||
}
|
||||
237
www/index.html
Normal file
237
www/index.html
Normal file
@@ -0,0 +1,237 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Pupmap by BoopLabs – v2025-10-03_2300</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<link href="https://unpkg.com/maplibre-gl/dist/maplibre-gl.css" rel="stylesheet"/>
|
||||
<script src="https://unpkg.com/maplibre-gl/dist/maplibre-gl.js"></script>
|
||||
<script src="https://unpkg.com/pmtiles/dist/pmtiles.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<input id="searchBox" placeholder="Search place..." />
|
||||
<div id="map"></div>
|
||||
|
||||
<script>
|
||||
const protocol = new pmtiles.Protocol();
|
||||
maplibregl.addProtocol("pmtiles", protocol.tile);
|
||||
|
||||
const map = new maplibregl.Map({
|
||||
container: 'map',
|
||||
style: 'style.json',
|
||||
center: [10, 60],
|
||||
zoom: 4
|
||||
});
|
||||
|
||||
map.on('load', () => {
|
||||
|
||||
// Roads
|
||||
map.addSource('roads', {
|
||||
type: 'geojson',
|
||||
data: 'data/roads_europe_clean.geojson'
|
||||
});
|
||||
|
||||
map.addLayer({
|
||||
id: 'roads-minor',
|
||||
type: 'line',
|
||||
source: 'roads',
|
||||
filter: ['==', ['get', 'type'], 'minor'],
|
||||
paint: {
|
||||
'line-color': '#cccccc',
|
||||
'line-width': 1,
|
||||
'line-opacity': 0.5
|
||||
}
|
||||
});
|
||||
|
||||
map.addLayer({
|
||||
id: 'roads-major',
|
||||
type: 'line',
|
||||
source: 'roads',
|
||||
filter: ['==', ['get', 'type'], 'major'],
|
||||
paint: {
|
||||
'line-color': '#555555',
|
||||
'line-width': 2,
|
||||
'line-opacity': 0.7
|
||||
}
|
||||
});
|
||||
|
||||
// Cities
|
||||
map.addSource('cities', {
|
||||
type: 'geojson',
|
||||
data: 'data/world_cities_europe_clean.geojson'
|
||||
});
|
||||
|
||||
map.addLayer({
|
||||
id: 'city-points-small',
|
||||
type: 'circle',
|
||||
source: 'cities',
|
||||
filter: ['<', ['get','POP_MAX'], 100000],
|
||||
paint: {
|
||||
'circle-radius': 3,
|
||||
'circle-color': '#999999',
|
||||
'circle-stroke-width': 1,
|
||||
'circle-stroke-color': '#666666'
|
||||
}
|
||||
});
|
||||
|
||||
map.addLayer({
|
||||
id: 'city-points-medium',
|
||||
type: 'circle',
|
||||
source: 'cities',
|
||||
filter: ['all', ['>=', ['get','POP_MAX'], 100000], ['<', ['get','POP_MAX'], 500000]],
|
||||
paint: {
|
||||
'circle-radius': 5,
|
||||
'circle-color': '#777777',
|
||||
'circle-stroke-width': 1,
|
||||
'circle-stroke-color': '#555555'
|
||||
}
|
||||
});
|
||||
|
||||
map.addLayer({
|
||||
id: 'city-points-large',
|
||||
type: 'circle',
|
||||
source: 'cities',
|
||||
filter: ['>=', ['get','POP_MAX'], 500000],
|
||||
paint: {
|
||||
'circle-radius': 7,
|
||||
'circle-color': '#444444',
|
||||
'circle-stroke-width': 1,
|
||||
'circle-stroke-color': '#222222'
|
||||
}
|
||||
});
|
||||
|
||||
// City labels, zoom + population based
|
||||
map.addLayer({
|
||||
id: 'city-labels',
|
||||
type: 'symbol',
|
||||
source: 'cities',
|
||||
layout: {
|
||||
'text-field': ['get', 'NAME'],
|
||||
'text-font': ['Open Sans Bold', 'Arial Unicode MS Bold'],
|
||||
'text-size': [
|
||||
'interpolate', ['linear'], ['zoom'],
|
||||
4, 10,
|
||||
6, 12,
|
||||
10, 16
|
||||
],
|
||||
'text-offset': [0, 1.2],
|
||||
'text-anchor': 'top'
|
||||
},
|
||||
paint: {
|
||||
'text-color': '#222222',
|
||||
'text-halo-color': '#ffffff',
|
||||
'text-halo-width': 1
|
||||
},
|
||||
filter: [
|
||||
'>',
|
||||
['get','POP_MAX'],
|
||||
['interpolate', ['linear'], ['zoom'],
|
||||
4, 2000000, // at zoom 4, only megacities
|
||||
6, 1000000, // at zoom 6, large cities
|
||||
8, 500000, // at zoom 8, medium cities
|
||||
10, 100000 // at zoom 10+, small cities
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// City popups
|
||||
map.on('click', ['city-points-small','city-points-medium','city-points-large'], (e) => {
|
||||
const coordinates = e.features[0].geometry.coordinates.slice();
|
||||
const cityName = e.features[0].properties.NAME || "Unknown City";
|
||||
const population = e.features[0].properties.POP_MAX || "n/a";
|
||||
new maplibregl.Popup()
|
||||
.setLngLat(coordinates)
|
||||
.setHTML(`<strong>${cityName}</strong><br/>Population: ${population}`)
|
||||
.addTo(map);
|
||||
});
|
||||
|
||||
// Cursor for city dots
|
||||
['city-points-small','city-points-medium','city-points-large'].forEach(layer => {
|
||||
map.on('mouseenter', layer, () => { map.getCanvas().style.cursor = 'pointer'; });
|
||||
map.on('mouseleave', layer, () => { map.getCanvas().style.cursor = ''; });
|
||||
});
|
||||
|
||||
// POIs
|
||||
map.addSource('pois', {
|
||||
type: 'geojson',
|
||||
data: 'data/pois.geojson',
|
||||
cluster: true,
|
||||
clusterMaxZoom: 14,
|
||||
clusterRadius: 50
|
||||
});
|
||||
|
||||
map.addLayer({
|
||||
id: 'clusters',
|
||||
type: 'circle',
|
||||
source: 'pois',
|
||||
filter: ['has', 'point_count'],
|
||||
paint: {
|
||||
'circle-color': '#FF0000',
|
||||
'circle-radius': ['step', ['get','point_count'], 15, 10, 20, 50, 25],
|
||||
'circle-opacity': 0.7,
|
||||
'circle-stroke-width': 1,
|
||||
'circle-stroke-color': '#fff'
|
||||
}
|
||||
});
|
||||
|
||||
map.addLayer({
|
||||
id: 'unclustered-point',
|
||||
type: 'circle',
|
||||
source: 'pois',
|
||||
filter: ['!', ['has','point_count']],
|
||||
paint: {
|
||||
'circle-color': '#FF0000',
|
||||
'circle-radius': 8,
|
||||
'circle-opacity': 0.7,
|
||||
'circle-stroke-width': 1,
|
||||
'circle-stroke-color': '#fff'
|
||||
}
|
||||
});
|
||||
|
||||
map.on('click', 'unclustered-point', (e) => {
|
||||
const coordinates = e.features[0].geometry.coordinates.slice();
|
||||
const popupContent = e.features[0].properties.popup || e.features[0].properties.names.join(', ');
|
||||
new maplibregl.Popup()
|
||||
.setLngLat(coordinates)
|
||||
.setHTML(`<strong>${popupContent}</strong>`)
|
||||
.addTo(map);
|
||||
});
|
||||
|
||||
map.on('click', 'clusters', (e) => {
|
||||
const features = map.queryRenderedFeatures(e.point, { layers: ['clusters'] });
|
||||
const clusterId = features[0].properties.cluster_id;
|
||||
map.getSource('pois').getClusterExpansionZoom(clusterId, (err, zoom) => {
|
||||
if (err) return;
|
||||
map.easeTo({ center: features[0].geometry.coordinates, zoom: zoom });
|
||||
});
|
||||
});
|
||||
|
||||
['clusters', 'unclustered-point'].forEach(layer => {
|
||||
map.on('mouseenter', layer, () => { map.getCanvas().style.cursor = 'pointer'; });
|
||||
map.on('mouseleave', layer, () => { map.getCanvas().style.cursor = ''; });
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// Nominatim search
|
||||
document.getElementById('searchBox').addEventListener('keypress', async function(e){
|
||||
if(e.key==='Enter'){
|
||||
const query = e.target.value;
|
||||
const url = `http://yourhost:7070/search?q=${encodeURIComponent(query)}&format=json`;
|
||||
try{
|
||||
const res = await fetch(url);
|
||||
const results = await res.json();
|
||||
if(results.length>0){
|
||||
const loc = results[0];
|
||||
map.flyTo({ center: [loc.lon, loc.lat], zoom: 12 });
|
||||
}else{ alert("No results found"); }
|
||||
}catch(err){ alert("Error connecting to search API"); console.error(err);}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
26
www/style.css
Normal file
26
www/style.css
Normal file
@@ -0,0 +1,26 @@
|
||||
/* Pupmap style.css */
|
||||
|
||||
body, html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#map {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#searchBox {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
z-index: 999;
|
||||
width: 220px;
|
||||
padding: 6px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #ccc;
|
||||
background: #fff;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
81
www/style.json
Normal file
81
www/style.json
Normal file
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"version": 8,
|
||||
"name": "Pupmap by BoopLabs v2025-10-03_1300",
|
||||
"sources": {
|
||||
"basemap": {
|
||||
"type": "vector",
|
||||
"url": "pmtiles://data/world.pmtiles"
|
||||
}
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"id": "background",
|
||||
"type": "background",
|
||||
"paint": {
|
||||
"background-color": "#C6F1DC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "earth",
|
||||
"type": "fill",
|
||||
"source": "basemap",
|
||||
"source-layer": "earth",
|
||||
"paint": {
|
||||
"fill-color": "#97E3C1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "land",
|
||||
"type": "fill",
|
||||
"source": "basemap",
|
||||
"source-layer": "landcover",
|
||||
"paint": {
|
||||
"fill-color": "#C6F1DC"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "landuse",
|
||||
"type": "fill",
|
||||
"source": "basemap",
|
||||
"source-layer": "landuse",
|
||||
"paint": {
|
||||
"fill-color": "#97E3C1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "water",
|
||||
"type": "fill",
|
||||
"source": "basemap",
|
||||
"source-layer": "water",
|
||||
"paint": {
|
||||
"fill-color": "#7CD5E9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "boundaries2",
|
||||
"type": "line",
|
||||
"source": "basemap",
|
||||
"source-layer": "boundaries",
|
||||
"paint": {
|
||||
"line-color": "#F08650",
|
||||
"line-width": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "boundaries",
|
||||
"type": "line",
|
||||
"source": "basemap",
|
||||
"source-layer": "boundaries",
|
||||
"filter": [
|
||||
"<=",
|
||||
"pmap:min_admin_level",
|
||||
1
|
||||
],
|
||||
"paint": {
|
||||
"line-color": "#000000",
|
||||
"line-width": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user