From 20dfb7cfcb0da6bd5c2c8d2bd95fb6e24bec8c89 Mon Sep 17 00:00:00 2001 From: barrulus Date: Tue, 2 Sep 2025 14:10:23 +0100 Subject: [PATCH] qgis additions --- TODO.md | 27 ++ Tourland Markers 2025-09-02-10-19.geojson | 1 + index.html | 19 + modules/io/export.js | 447 +++++++++++++++++++++- qgis/README.md | 39 ++ qgis/styles/burgs.qml | 45 +++ qgis/styles/cells.qml | 49 +++ qgis/styles/cultures.qml | 36 ++ qgis/styles/markers.qml | 56 +++ qgis/styles/provinces.qml | 36 ++ qgis/styles/regiments.qml | 25 ++ qgis/styles/religions.qml | 36 ++ qgis/styles/rivers.qml | 26 ++ qgis/styles/routes.qml | 68 ++++ qgis/styles/states.qml | 36 ++ qgis/styles/zones.qml | 36 ++ run_python_server.bat | 4 +- 17 files changed, 969 insertions(+), 17 deletions(-) create mode 100644 TODO.md create mode 100644 Tourland Markers 2025-09-02-10-19.geojson create mode 100644 qgis/README.md create mode 100644 qgis/styles/burgs.qml create mode 100644 qgis/styles/cells.qml create mode 100644 qgis/styles/cultures.qml create mode 100644 qgis/styles/markers.qml create mode 100644 qgis/styles/provinces.qml create mode 100644 qgis/styles/regiments.qml create mode 100644 qgis/styles/religions.qml create mode 100644 qgis/styles/rivers.qml create mode 100644 qgis/styles/routes.qml create mode 100644 qgis/styles/states.qml create mode 100644 qgis/styles/zones.qml diff --git a/TODO.md b/TODO.md new file mode 100644 index 00000000..a5b79253 --- /dev/null +++ b/TODO.md @@ -0,0 +1,27 @@ +# TODO + +## GeoJSON Exports (RFC 7946 compliance) + +- Geometry in WGS84: Output `geometry.coordinates` as `[lon, lat]` (degrees). Do not include a top-level `crs` member (deprecated in RFC 7946). +- Move custom coords to properties: Keep fantasy/cartesian meters and pixel positions under `properties` (e.g., `fantasy_coordinates: [x_m, y_m]`, `x_px`, `y_px`, `meters_per_pixel`). +- Preserve fields: Continue exporting `id`, `type`, `name`, `icon` (where applicable), style fields (`size`, `fill`, `stroke`), and `note` (legend) if present. +- Update exporters: Apply to all GeoJSON exporters in `modules/io/export.js`: + - `saveGeoJsonMarkers` + - `saveGeoJsonRivers` + - `saveGeoJsonBurgs` + - `saveGeoJsonRoutes` + - `saveGeoJsonCells` + - `saveGeoJsonRegiments` +- Geometry specifics: + - Points (markers/burgs): `[lon, lat]` via `getLongitude(x)`, `getLatitude(y)`. + - Lines (rivers/routes): arrays of `[lon, lat]`; keep width/length and any fantasy metrics in `properties`. + - Polygons (cells): rings in `[lon, lat]`; move fantasy/cartesian vertices to `properties` if needed. +- Metadata: Keep projection info only as a custom field (e.g., `metadata.projection: "Fantasy Map Cartesian (meters)"`). Avoid reintroducing `crs`. +- Acceptance criteria: + - Files validate without CRS/projection warnings in common validators. + - QGIS/geojson.io load geometries correctly as WGS84. + - Internal consumers retain access to fantasy coords via `properties`. +- Backward compatibility: Consider a toggle to export in either WGS84 or fantasy-cartesian for users relying on previous behavior; otherwise bump export format version in `metadata`. + +Note: `saveGeoJsonMarkers` now includes `name` (mirrors CSV). Ensure other exporters include analogous name fields where applicable. + diff --git a/Tourland Markers 2025-09-02-10-19.geojson b/Tourland Markers 2025-09-02-10-19.geojson new file mode 100644 index 00000000..5247da04 --- /dev/null +++ b/Tourland Markers 2025-09-02-10-19.geojson @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[1439070,-1119480]},"properties":{"id":0,"type":"volcanoes","name":"Ormsham","icon":"🌋","x_px":479.69,"y_px":373.16,"note":"Dormant volcano. Height: 5625 m."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3115500,-1322280]},"properties":{"id":1,"type":"hot-springs","name":"Zhazsad Hot Springs","icon":"♨️","x_px":1038.5,"y_px":440.76,"note":"A geothermal springs with naturally heated water that provide relaxation and medicinal benefits. Average temperature is 20°C."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3283200,-687780]},"properties":{"id":2,"type":"water-sources","name":"Retha Creek of Luck","icon":"💧","x_px":1094.4,"y_px":229.26,"note":"This legendary water source is whispered about in ancient tales and believed to possess mystical properties. The spring emanates crystal-clear water, shimmering with an otherworldly iridescence that sparkles even in the dimmest light."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2874000,-1049100]},"properties":{"id":3,"type":"mines","name":"Liacacal — silver mining town","icon":"⛏️","x_px":958,"y_px":349.7,"note":"Liacacal is a mining town of 10 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3409080,-954660]},"properties":{"id":4,"type":"mines","name":"Gobok — salt mining town","icon":"⛏️","x_px":1136.36,"y_px":318.22,"note":"Gobok is a mining town of 13 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1470540,-1082730]},"properties":{"id":5,"type":"mines","name":"Kovayazli — copper mining town","icon":"⛏️","x_px":490.18,"y_px":360.91,"note":"Kovayazli is a mining town of 22 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1861530,-1203120]},"properties":{"id":6,"type":"mines","name":"Boca — gold mining town","icon":"⛏️","x_px":620.51,"y_px":401.04,"note":"Boca is a mining town of 50 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3189510,-1242810]},"properties":{"id":7,"type":"mines","name":"Cielb — copper mining town","icon":"⛏️","x_px":1063.17,"y_px":414.27,"note":"Cielb is a mining town of 395 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4013190,-1198260]},"properties":{"id":8,"type":"mines","name":"Nylmnes — salt mining town","icon":"⛏️","x_px":1337.73,"y_px":399.42,"note":"Nylmnes is a mining town of 283 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1369950,-1056300]},"properties":{"id":9,"type":"mines","name":"Boguz — silver mining town","icon":"⛏️","x_px":456.65,"y_px":352.1,"note":"Boguz is a mining town of 34 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3513510,-920070]},"properties":{"id":10,"type":"mines","name":"Ilmzois — tin mining town","icon":"⛏️","x_px":1171.17,"y_px":306.69,"note":"Ilmzois is a mining town of 160 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3613710,-1437150]},"properties":{"id":11,"type":"mines","name":"Srurd — gold mining town","icon":"⛏️","x_px":1204.57,"y_px":479.05,"note":"Srurd is a mining town of 27 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3622590,-1152930]},"properties":{"id":12,"type":"mines","name":"Stioldai — lead mining town","icon":"⛏️","x_px":1207.53,"y_px":384.31,"note":"Stioldai is a mining town of 38 people just nearby the lead mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3035070,-1299960]},"properties":{"id":13,"type":"mines","name":"Chaqoziho — silver mining town","icon":"⛏️","x_px":1011.69,"y_px":433.32,"note":"Chaqoziho is a mining town of 50 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3795000,-1284390]},"properties":{"id":14,"type":"mines","name":"Bugbig — silver mining town","icon":"⛏️","x_px":1265,"y_px":428.13,"note":"Bugbig is a mining town of 237 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3834750,-1218540]},"properties":{"id":15,"type":"mines","name":"Ishzaarm — copper mining town","icon":"⛏️","x_px":1278.25,"y_px":406.18,"note":"Ishzaarm is a mining town of 45 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1179720,-1004820]},"properties":{"id":16,"type":"mines","name":"Bunalarara — iron mining town","icon":"⛏️","x_px":393.24,"y_px":334.94,"note":"Bunalarara is a mining town of 251 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3877680,-1288740]},"properties":{"id":17,"type":"mines","name":"Brat — salt mining town","icon":"⛏️","x_px":1292.56,"y_px":429.58,"note":"Brat is a mining town of 50 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1037850,-1128090]},"properties":{"id":18,"type":"mines","name":"Nulbilbunda — silver mining town","icon":"⛏️","x_px":345.95,"y_px":376.03,"note":"Nulbilbunda is a mining town of 230 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[745590,-1512960]},"properties":{"id":19,"type":"mines","name":"Bilgabhur — copper mining town","icon":"⛏️","x_px":248.53,"y_px":504.32,"note":"Bilgabhur is a mining town of 23 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3444720,-939840]},"properties":{"id":20,"type":"mines","name":"Wruilkeh — gold mining town","icon":"⛏️","x_px":1148.24,"y_px":313.28,"note":"Wruilkeh is a mining town of 10 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1549110,-1102800]},"properties":{"id":21,"type":"mines","name":"Vuyu — silver mining town","icon":"⛏️","x_px":516.37,"y_px":367.6,"note":"Vuyu is a mining town of 1000 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1393290,-1468650]},"properties":{"id":22,"type":"mines","name":"Shathanarg — silver mining town","icon":"⛏️","x_px":464.43,"y_px":489.55,"note":"Shathanarg is a mining town of 31 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4027800,-1406790]},"properties":{"id":23,"type":"mines","name":"Rezgzo — silver mining town","icon":"⛏️","x_px":1342.6,"y_px":468.93,"note":"Rezgzo is a mining town of 50 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3726900,-1115460]},"properties":{"id":24,"type":"mines","name":"Veekz — lead mining town","icon":"⛏️","x_px":1242.3,"y_px":371.82,"note":"Veekz is a mining town of 50 people just nearby the lead mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3775530,-1241610]},"properties":{"id":25,"type":"mines","name":"Swasinx — silver mining town","icon":"⛏️","x_px":1258.51,"y_px":413.87,"note":"Swasinx is a mining town of 27 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1368660,-1013010]},"properties":{"id":26,"type":"mines","name":"Bovanar — tin mining town","icon":"⛏️","x_px":456.22,"y_px":337.67,"note":"Bovanar is a mining town of 48 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1303650,-1029690]},"properties":{"id":27,"type":"mines","name":"Aski — iron mining town","icon":"⛏️","x_px":434.55,"y_px":343.23,"note":"Aski is a mining town of 13 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1136640,-1244160]},"properties":{"id":28,"type":"mines","name":"Binulb — gold mining town","icon":"⛏️","x_px":378.88,"y_px":414.72,"note":"Binulb is a mining town of 570 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3211980,-858120]},"properties":{"id":29,"type":"mines","name":"Fruict — silver mining town","icon":"⛏️","x_px":1070.66,"y_px":286.04,"note":"Fruict is a mining town of 50 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3250830,-955320]},"properties":{"id":30,"type":"mines","name":"Stiagli — tin mining town","icon":"⛏️","x_px":1083.61,"y_px":318.44,"note":"Stiagli is a mining town of 50 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1672800,-1329750]},"properties":{"id":31,"type":"mines","name":"Shabulundus — tin mining town","icon":"⛏️","x_px":557.6,"y_px":443.25,"note":"Shabulundus is a mining town of 50 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1793880,-1260630]},"properties":{"id":32,"type":"mines","name":"Sharakhilbi — salt mining town","icon":"⛏️","x_px":597.96,"y_px":420.21,"note":"Sharakhilbi is a mining town of 50 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1673610,-1226970]},"properties":{"id":33,"type":"mines","name":"Khiz — gold mining town","icon":"⛏️","x_px":557.87,"y_px":408.99,"note":"Khiz is a mining town of 50 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1192410,-1309350]},"properties":{"id":34,"type":"mines","name":"Khanargzig — silver mining town","icon":"⛏️","x_px":397.47,"y_px":436.45,"note":"Khanargzig is a mining town of 27 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3097650,-1248960]},"properties":{"id":35,"type":"mines","name":"Ceveed — silver mining town","icon":"⛏️","x_px":1032.55,"y_px":416.32,"note":"Ceveed is a mining town of 143 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3319350,-592980]},"properties":{"id":36,"type":"mines","name":"Boberkaldlu — salt mining town","icon":"⛏️","x_px":1106.45,"y_px":197.66,"note":"Boberkaldlu is a mining town of 48 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4003770,-1227690]},"properties":{"id":37,"type":"mines","name":"Ormrion — salt mining town","icon":"⛏️","x_px":1334.59,"y_px":409.23,"note":"Ormrion is a mining town of 403 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[892230,-1470870]},"properties":{"id":38,"type":"mines","name":"Aram — salt mining town","icon":"⛏️","x_px":297.41,"y_px":490.29,"note":"Aram is a mining town of 39 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3963090,-1192740]},"properties":{"id":39,"type":"mines","name":"Thelt — iron mining town","icon":"⛏️","x_px":1321.03,"y_px":397.58,"note":"Thelt is a mining town of 215 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4066020,-1439520]},"properties":{"id":40,"type":"mines","name":"Rezgkigh — silver mining town","icon":"⛏️","x_px":1355.34,"y_px":479.84,"note":"Rezgkigh is a mining town of 25 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3928650,-1364040]},"properties":{"id":41,"type":"mines","name":"Rarno — silver mining town","icon":"⛏️","x_px":1309.55,"y_px":454.68,"note":"Rarno is a mining town of 26 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1865910,-1245390]},"properties":{"id":42,"type":"mines","name":"Turksunsaz — salt mining town","icon":"⛏️","x_px":621.97,"y_px":415.13,"note":"Turksunsaz is a mining town of 35 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[759840,-1500630]},"properties":{"id":43,"type":"mines","name":"Nuzunzar — lead mining town","icon":"⛏️","x_px":253.28,"y_px":500.21,"note":"Nuzunzar is a mining town of 22 people just nearby the lead mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3695310,-1216860]},"properties":{"id":44,"type":"mines","name":"Stiag — gold mining town","icon":"⛏️","x_px":1231.77,"y_px":405.62,"note":"Stiag is a mining town of 27 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3258120,-878700]},"properties":{"id":45,"type":"mines","name":"Slutiarm — iron mining town","icon":"⛏️","x_px":1086.04,"y_px":292.9,"note":"Slutiarm is a mining town of 45 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3376170,-1037640]},"properties":{"id":46,"type":"mines","name":"Rekx — iron mining town","icon":"⛏️","x_px":1125.39,"y_px":345.88,"note":"Rekx is a mining town of 500 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[823620,-1196970]},"properties":{"id":47,"type":"mines","name":"Nadab — salt mining town","icon":"⛏️","x_px":274.54,"y_px":398.99,"note":"Nadab is a mining town of 44 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3401940,-1373760]},"properties":{"id":48,"type":"mines","name":"Chox — silver mining town","icon":"⛏️","x_px":1133.98,"y_px":457.92,"note":"Chox is a mining town of 38 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[875700,-1156650]},"properties":{"id":49,"type":"mines","name":"Bunzanzadd — silver mining town","icon":"⛏️","x_px":291.9,"y_px":385.55,"note":"Bunzanzadd is a mining town of 21 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3177900,-863430]},"properties":{"id":50,"type":"mines","name":"Pyreazi — salt mining town","icon":"⛏️","x_px":1059.3,"y_px":287.81,"note":"Pyreazi is a mining town of 735 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[943590,-1431720]},"properties":{"id":51,"type":"mines","name":"Kinulb — copper mining town","icon":"⛏️","x_px":314.53,"y_px":477.24,"note":"Kinulb is a mining town of 20 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3387960,-682260]},"properties":{"id":52,"type":"mines","name":"Zirdishasad — silver mining town","icon":"⛏️","x_px":1129.32,"y_px":227.42,"note":"Zirdishasad is a mining town of 50 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3447990,-1065690]},"properties":{"id":53,"type":"mines","name":"Stiag — salt mining town","icon":"⛏️","x_px":1149.33,"y_px":355.23,"note":"Stiag is a mining town of 1000 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1498560,-1146900]},"properties":{"id":54,"type":"mines","name":"Kartluyu — silver mining town","icon":"⛏️","x_px":499.52,"y_px":382.3,"note":"Kartluyu is a mining town of 47 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2942820,-943680]},"properties":{"id":55,"type":"mines","name":"Sazi — iron mining town","icon":"⛏️","x_px":980.94,"y_px":314.56,"note":"Sazi is a mining town of 20 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1075650,-1112100]},"properties":{"id":56,"type":"mines","name":"Nulahakinb — lead mining town","icon":"⛏️","x_px":358.55,"y_px":370.7,"note":"Nulahakinb is a mining town of 36 people just nearby the lead mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3628020,-1061370]},"properties":{"id":57,"type":"mines","name":"Gobtong — salt mining town","icon":"⛏️","x_px":1209.34,"y_px":353.79,"note":"Gobtong is a mining town of 10 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1055040,-1108860]},"properties":{"id":58,"type":"mines","name":"Nadush — salt mining town","icon":"⛏️","x_px":351.68,"y_px":369.62,"note":"Nadush is a mining town of 27 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3468330,-1407150]},"properties":{"id":59,"type":"mines","name":"Gob — gold mining town","icon":"⛏️","x_px":1156.11,"y_px":469.05,"note":"Gob is a mining town of 200 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3759390,-1265130]},"properties":{"id":60,"type":"mines","name":"Ukex — silver mining town","icon":"⛏️","x_px":1253.13,"y_px":421.71,"note":"Ukex is a mining town of 194 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[957990,-1122480]},"properties":{"id":61,"type":"mines","name":"Zarukthel — copper mining town","icon":"⛏️","x_px":319.33,"y_px":374.16,"note":"Zarukthel is a mining town of 46 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1316970,-1202340]},"properties":{"id":62,"type":"mines","name":"Bunulgab — gold mining town","icon":"⛏️","x_px":438.99,"y_px":400.78,"note":"Bunulgab is a mining town of 196 people just nearby the gold mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3188400,-845370]},"properties":{"id":63,"type":"mines","name":"Suirx — tin mining town","icon":"⛏️","x_px":1062.8,"y_px":281.79,"note":"Suirx is a mining town of 27 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3662130,-1151580]},"properties":{"id":64,"type":"mines","name":"Zriokots — silver mining town","icon":"⛏️","x_px":1220.71,"y_px":383.86,"note":"Zriokots is a mining town of 26 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1429080,-1045500]},"properties":{"id":65,"type":"mines","name":"Asiyolgar — lead mining town","icon":"⛏️","x_px":476.36,"y_px":348.5,"note":"Asiyolgar is a mining town of 221 people just nearby the lead mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3886020,-1367940]},"properties":{"id":66,"type":"mines","name":"Laik'zox — silver mining town","icon":"⛏️","x_px":1295.34,"y_px":455.98,"note":"Laik'zox is a mining town of 22 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3035640,-1215930]},"properties":{"id":67,"type":"mines","name":"Savee — silver mining town","icon":"⛏️","x_px":1011.88,"y_px":405.31,"note":"Savee is a mining town of 21 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3470250,-1209510]},"properties":{"id":68,"type":"mines","name":"Felbogsee — iron mining town","icon":"⛏️","x_px":1156.75,"y_px":403.17,"note":"Felbogsee is a mining town of 50 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3676230,-1377720]},"properties":{"id":69,"type":"mines","name":"Sioshai — copper mining town","icon":"⛏️","x_px":1225.41,"y_px":459.24,"note":"Sioshai is a mining town of 26 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3087930,-1296840]},"properties":{"id":70,"type":"mines","name":"Chol — silver mining town","icon":"⛏️","x_px":1029.31,"y_px":432.28,"note":"Chol is a mining town of 50 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3866910,-1242390]},"properties":{"id":71,"type":"mines","name":"Klilm — copper mining town","icon":"⛏️","x_px":1288.97,"y_px":414.13,"note":"Klilm is a mining town of 20 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1429860,-1081200]},"properties":{"id":72,"type":"mines","name":"Kumsepeme — iron mining town","icon":"⛏️","x_px":476.62,"y_px":360.4,"note":"Kumsepeme is a mining town of 24 people just nearby the iron mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2927070,-640950]},"properties":{"id":73,"type":"mines","name":"Midagiad-Ni — silver mining town","icon":"⛏️","x_px":975.69,"y_px":213.65,"note":"Midagiad-Ni is a mining town of 573 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1040070,-1108710]},"properties":{"id":74,"type":"mines","name":"Khizdinda — silver mining town","icon":"⛏️","x_px":346.69,"y_px":369.57,"note":"Khizdinda is a mining town of 14 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[944700,-1397520]},"properties":{"id":75,"type":"mines","name":"Gatharb — salt mining town","icon":"⛏️","x_px":314.9,"y_px":465.84,"note":"Gatharb is a mining town of 32 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1658100,-1224630]},"properties":{"id":76,"type":"mines","name":"Gathargath — tin mining town","icon":"⛏️","x_px":552.7,"y_px":408.21,"note":"Gathargath is a mining town of 299 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3165810,-653730]},"properties":{"id":77,"type":"mines","name":"Hlaughelssin — salt mining town","icon":"⛏️","x_px":1055.27,"y_px":217.91,"note":"Hlaughelssin is a mining town of 19 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1849260,-1287840]},"properties":{"id":78,"type":"mines","name":"Gabilbundu — silver mining town","icon":"⛏️","x_px":616.42,"y_px":429.28,"note":"Gabilbundu is a mining town of 191 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3471570,-904920]},"properties":{"id":79,"type":"mines","name":"Katha — copper mining town","icon":"⛏️","x_px":1157.19,"y_px":301.64,"note":"Katha is a mining town of 43 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1219800,-1074090]},"properties":{"id":80,"type":"mines","name":"Shatharb — tin mining town","icon":"⛏️","x_px":406.6,"y_px":358.03,"note":"Shatharb is a mining town of 46 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3547650,-1008420]},"properties":{"id":81,"type":"mines","name":"Chalk — salt mining town","icon":"⛏️","x_px":1182.55,"y_px":336.14,"note":"Chalk is a mining town of 49 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3545340,-1172550]},"properties":{"id":82,"type":"mines","name":"Blus — silver mining town","icon":"⛏️","x_px":1181.78,"y_px":390.85,"note":"Blus is a mining town of 1000 people just nearby the silver mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1621500,-1407930]},"properties":{"id":83,"type":"mines","name":"Shazirakzar — tin mining town","icon":"⛏️","x_px":540.5,"y_px":469.31,"note":"Shazirakzar is a mining town of 870 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3971640,-1267830]},"properties":{"id":84,"type":"mines","name":"Kleardeek — salt mining town","icon":"⛏️","x_px":1323.88,"y_px":422.61,"note":"Kleardeek is a mining town of 10 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3465090,-983940]},"properties":{"id":85,"type":"mines","name":"Pyreaz — copper mining town","icon":"⛏️","x_px":1155.03,"y_px":327.98,"note":"Pyreaz is a mining town of 10 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3784350,-1335600]},"properties":{"id":86,"type":"mines","name":"Srefsheaf — salt mining town","icon":"⛏️","x_px":1261.45,"y_px":445.2,"note":"Srefsheaf is a mining town of 96 people just nearby the salt mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3901620,-1394040]},"properties":{"id":87,"type":"mines","name":"Qheqilraq — tin mining town","icon":"⛏️","x_px":1300.54,"y_px":464.68,"note":"Qheqilraq is a mining town of 10 people just nearby the tin mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[805500,-1206780]},"properties":{"id":88,"type":"mines","name":"Namunz — copper mining town","icon":"⛏️","x_px":268.5,"y_px":402.26,"note":"Namunz is a mining town of 10 people just nearby the copper mine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1639860,-775110]},"properties":{"id":89,"type":"bridges","name":"Obanoyu Bridge","icon":"🌉","x_px":546.62,"y_px":258.37,"note":"A stone bridge spans over the Obanoyu River near Ergane."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3968130,-797130]},"properties":{"id":90,"type":"bridges","name":"Chan Bridge","icon":"🌉","x_px":1322.71,"y_px":265.71,"note":"A stone bridge spans over the Gorethuhella River near Chan."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1647570,-786060]},"properties":{"id":91,"type":"inns","name":"The White Panther","icon":"🍻","x_px":549.19,"y_px":262.02,"note":"A big and famous roadside tavern. Delicious spit-roasted peas with smelly spirits is served here."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1786230,-1887630]},"properties":{"id":92,"type":"lighthouses","name":"Shundushur Lighthouse","icon":"🚨","x_px":595.41,"y_px":629.21,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2945190,-1541580]},"properties":{"id":93,"type":"lighthouses","name":"Qhacihan Lighthouse","icon":"🚨","x_px":981.73,"y_px":513.86,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2382870,-502560]},"properties":{"id":94,"type":"lighthouses","name":"Mithussiph Lighthouse","icon":"🚨","x_px":794.29,"y_px":167.52,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1924290,-1864860]},"properties":{"id":95,"type":"lighthouses","name":"Kiruktharb Lighthouse","icon":"🚨","x_px":641.43,"y_px":621.62,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[395760,-934920]},"properties":{"id":96,"type":"lighthouses","name":"Epesean Lighthouse","icon":"🚨","x_px":131.92,"y_px":311.64,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3998730,-1941060]},"properties":{"id":97,"type":"lighthouses","name":"Hiavhath Lighthouse","icon":"🚨","x_px":1332.91,"y_px":647.02,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1950180,-975540]},"properties":{"id":98,"type":"lighthouses","name":"Altan Lighthouse","icon":"🚨","x_px":650.06,"y_px":325.18,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1204350,-2093970]},"properties":{"id":99,"type":"lighthouses","name":"Khabuled Lighthouse","icon":"🚨","x_px":401.45,"y_px":697.99,"note":"A lighthouse to serve as a beacon for ships in the open sea."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3967740,-1725060]},"properties":{"id":100,"type":"battlefields","name":"Szezses Battlefield","icon":"⚔️","x_px":1322.58,"y_px":575.02,"note":"A historical battle of the Dird Rebellion. \r\nDate: February 6, 1907 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3630540,-676200]},"properties":{"id":101,"type":"battlefields","name":"Hlaugwendor Battlefield","icon":"⚔️","x_px":1210.18,"y_px":225.4,"note":"A historical battle of the Gholese Conflict. \r\nDate: January 20, 1910 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3744180,-1492980]},"properties":{"id":102,"type":"battlefields","name":"Xeeknur Battlefield","icon":"⚔️","x_px":1248.06,"y_px":497.66,"note":"A historical battle of the Sir War. \r\nDate: August 25, 161 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4028250,-1426020]},"properties":{"id":103,"type":"battlefields","name":"Chaz Battlefield","icon":"⚔️","x_px":1342.75,"y_px":475.34,"note":"A historical battle of the Irdan Invasion. \r\nDate: December 3, 326 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3188460,-698280]},"properties":{"id":104,"type":"battlefields","name":"Guald'rau Battlefield","icon":"⚔️","x_px":1062.82,"y_px":232.76,"note":"A historical battle of the Wethyr Intervention. \r\nDate: May 3, 221 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3663210,-932160]},"properties":{"id":105,"type":"battlefields","name":"Combengethiz Battlefield","icon":"⚔️","x_px":1221.07,"y_px":310.72,"note":"A historical battle of the Hiavhiean Rebellion. \r\nDate: April 30, 128 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1760880,-1668870]},"properties":{"id":106,"type":"battlefields","name":"Buraz Battlefield","icon":"⚔️","x_px":586.96,"y_px":556.29,"note":"A historical battle of the Uzahan War. \r\nDate: January 24, 245 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3454380,-1730910]},"properties":{"id":107,"type":"battlefields","name":"Yicath'ar Battlefield","icon":"⚔️","x_px":1151.46,"y_px":576.97,"note":"A historical battle of the Beybarduan Campaign. \r\nDate: September 30, 259 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2690820,-1106100]},"properties":{"id":108,"type":"battlefields","name":"Chizseva Battlefield","icon":"⚔️","x_px":896.94,"y_px":368.7,"note":"A historical battle of the Ugh War. \r\nDate: September 23, 171 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1287270,-1735980]},"properties":{"id":109,"type":"battlefields","name":"Shatharb Battlefield","icon":"⚔️","x_px":429.09,"y_px":578.66,"note":"A historical battle of the Zunese Crusade. \r\nDate: January 27, 155 Szekos Era."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3323130,-902520]},"properties":{"id":110,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1107.71,"y_px":300.84,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3212610,-1368360]},"properties":{"id":111,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1070.87,"y_px":456.12,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3485190,-1566240]},"properties":{"id":112,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1161.73,"y_px":522.08,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3351270,-857580]},"properties":{"id":113,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1117.09,"y_px":285.86,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2627280,-1027650]},"properties":{"id":114,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":875.76,"y_px":342.55,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3486960,-1355550]},"properties":{"id":115,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1162.32,"y_px":451.85,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3546240,-446940]},"properties":{"id":116,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1182.08,"y_px":148.98,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3609270,-495600]},"properties":{"id":117,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1203.09,"y_px":165.2,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3673410,-1461780]},"properties":{"id":118,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1224.47,"y_px":487.26,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3605190,-987930]},"properties":{"id":119,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1201.73,"y_px":329.31,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3290970,-400950]},"properties":{"id":120,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1096.99,"y_px":133.65,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3264210,-1356810]},"properties":{"id":121,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1088.07,"y_px":452.27,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1284690,-1244970]},"properties":{"id":122,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":428.23,"y_px":414.99,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1386420,-1342980]},"properties":{"id":123,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":462.14,"y_px":447.66,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3468330,-1618620]},"properties":{"id":124,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1156.11,"y_px":539.54,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3805170,-1276740]},"properties":{"id":125,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":1268.39,"y_px":425.58,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1413870,-1583160]},"properties":{"id":126,"type":"dungeons","name":"Dungeon","icon":"🗝️","x_px":471.29,"y_px":527.72,"note":"
Undiscovered dungeon. See One page dungeon
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2102580,-1549890]},"properties":{"id":127,"type":"lake-monsters","name":"Dopuz Monster","icon":"🐉","x_px":700.86,"y_px":516.63,"note":"Whispers say a relic monster of 5 m long inhabits Dopuz Lake. Truth or lie, folks are afraid to fish in the lake."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1750500,-684390]},"properties":{"id":128,"type":"lake-monsters","name":"Sarpseren Monster","icon":"🐉","x_px":583.5,"y_px":228.13,"note":"Locals say a relic monster of 13 m long inhabits Sarpseren Lake. Truth or lie, folks are afraid to fish in the lake."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1252800,-2143800]},"properties":{"id":129,"type":"sea-monsters","name":"Fovil Monster","icon":"🦑","x_px":417.6,"y_px":714.6,"note":"Old sailors tell stories of a gigantic sea monster inhabiting these dangerous waters. Rumors say it can be 22 m long."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4316550,-1123080]},"properties":{"id":130,"type":"sea-monsters","name":"Causkirk Monster","icon":"🦑","x_px":1438.85,"y_px":374.36,"note":"Old sailors tell stories of a gigantic sea monster inhabiting these dangerous waters. Rumors say it can be 36 m long."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[678120,-1471620]},"properties":{"id":131,"type":"sea-monsters","name":"Soutford Monster","icon":"🦑","x_px":226.04,"y_px":490.54,"note":"Old sailors tell stories of a gigantic sea monster inhabiting these dangerous waters. Rumors say it can be 21 m long."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2915370,-654840]},"properties":{"id":132,"type":"hill-monsters","name":"Dodoraghmor Beast","icon":"👹","x_px":971.79,"y_px":218.28,"note":"Inscriptions speak of a great Beast who inhabits Dodoraghmor hills and harasses travelers in the area."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1530810,-1402530]},"properties":{"id":133,"type":"hill-monsters","name":"Fendon Vampire","icon":"👹","x_px":510.27,"y_px":467.51,"note":"Legends speak of a hungry Vampire who inhabits Fendon hills and terrorizes the region."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3659250,-568320]},"properties":{"id":134,"type":"hill-monsters","name":"Rothinsey Roc","icon":"👹","x_px":1219.75,"y_px":189.44,"note":"Tales speak of a great Roc who inhabits Rothinsey hills and keeps the region at bay."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1327350,-1212480]},"properties":{"id":135,"type":"hill-monsters","name":"Narakib Hydra","icon":"👹","x_px":442.45,"y_px":404.16,"note":"Tales speak of a horrifying Hydra who inhabits Narakib hills and keeps the region at bay."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2753670,-817260]},"properties":{"id":136,"type":"sacred-forests","name":"Brugzag Forest","icon":"🌳","x_px":917.89,"y_px":272.42,"note":"A forest sacred to local Ugluk (Orkish) Gods."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1288320,-2056080]},"properties":{"id":137,"type":"sacred-forests","name":"Kharbhathiz Forest","icon":"🌳","x_px":429.44,"y_px":685.36,"note":"A forest sacred to local Nuzadushism."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4008810,-1804710]},"properties":{"id":138,"type":"sacred-forests","name":"Krarrithi Forest","icon":"🌳","x_px":1336.27,"y_px":601.57,"note":"A forest sacred to local Shr Society."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4035630,-600300]},"properties":{"id":139,"type":"sacred-forests","name":"O'ruhn Forest","icon":"🌳","x_px":1345.21,"y_px":200.1,"note":"A forest sacred to local Trow (Dark Elfish) Druidism."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3741480,-601020]},"properties":{"id":140,"type":"sacred-pineries","name":"Ashindreth Pinery","icon":"🌲","x_px":1247.16,"y_px":200.34,"note":"A pinery sacred to local Chanese Religion."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4040730,-1595880]},"properties":{"id":141,"type":"brigands","name":"Kleiliced Wolfs","icon":"💰","x_px":1346.91,"y_px":531.96,"note":"A gang of forest bandits."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1895700,-1749210]},"properties":{"id":142,"type":"brigands","name":"Biledzig Badgers","icon":"💰","x_px":631.9,"y_px":583.07,"note":"A gang of mounted highwaymen."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3683430,-1788570]},"properties":{"id":143,"type":"brigands","name":"Esir Apes","icon":"💰","x_px":1227.81,"y_px":596.19,"note":"A gang of mounted highwaymen."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4181160,-1154250]},"properties":{"id":144,"type":"brigands","name":"Dretha Rooks","icon":"💰","x_px":1393.72,"y_px":384.75,"note":"A gang of swamp robbers."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4242870,-1255560]},"properties":{"id":145,"type":"brigands","name":"Neadire Wolverines","icon":"💰","x_px":1414.29,"y_px":418.52,"note":"A gang of swamp bandits."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1222650,-756450]},"properties":{"id":146,"type":"brigands","name":"Kornuzun Jackals","icon":"💰","x_px":407.55,"y_px":252.15,"note":"A gang of forest robbers."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1245600,-2092200]},"properties":{"id":147,"type":"pirates","name":"Pirates","icon":"🏴‍☠️","x_px":415.2,"y_px":697.4,"note":"Pirate ships have been spotted in these waters."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4047960,-871920]},"properties":{"id":148,"type":"pirates","name":"Pirates","icon":"🏴‍☠️","x_px":1349.32,"y_px":290.64,"note":"Pirate ships have been spotted in these waters."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2603640,-2048580]},"properties":{"id":149,"type":"pirates","name":"Pirates","icon":"🏴‍☠️","x_px":867.88,"y_px":682.86,"note":"Pirate ships have been spotted in these waters."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2066640,-1183110]},"properties":{"id":150,"type":"pirates","name":"Pirates","icon":"🏴‍☠️","x_px":688.88,"y_px":394.37,"note":"Pirate ships have been spotted in these waters."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1916700,-951900]},"properties":{"id":151,"type":"pirates","name":"Pirates","icon":"🏴‍☠️","x_px":638.9,"y_px":317.3,"note":"Pirate ships have been spotted in these waters."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3982800,-1885800]},"properties":{"id":152,"type":"pirates","name":"Pirates","icon":"🏴‍☠️","x_px":1327.6,"y_px":628.6,"note":"Pirate ships have been spotted in these waters."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3427440,-1745010]},"properties":{"id":153,"type":"statues","name":"Shrontacha Statue","icon":"🗿","x_px":1142.48,"y_px":581.67,"note":"An ancient statue. It has an inscription, but no one can translate it:\n
ᠱᡖᡖᢋᡠᡓᠠᡴᡔᡐᠾᡭᡴᡲᡁᡝᡝᢤᢟᠻᡁᡆᡐᢡᡠᠵᠨᡀᠻᠿᡳᢐ᠑᠐ᠲᡜᡭᡴᠳᡡᡗᠧᡰᠳᠰᠩᠰᡙᡖᠯᢀᢑᠰᠨᡍᠱᡜᡔᠯᠪ
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2666970,-802290]},"properties":{"id":154,"type":"statues","name":"Bash Runestone","icon":"🗿","x_px":888.99,"y_px":267.43,"note":"An ancient runestone. It has an inscription, but no one can translate it:\n
༾༹༦༭༌༌༂༒༮༘༔༵༫༠༚༦༒༫༽༲༙༣༡༦༾༤༤༁༳༰༔ༀ༫༜༪་༷༽༿༰༂༑༴༅༸༈༕༽༌༚༮༛༩༆༜༉༄༠་༿༼༦༃ༀ༸༓༻༁༳༲༦་༓༑༧༵༳༠༶༊
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3469620,-1756830]},"properties":{"id":155,"type":"statues","name":"Khri Monolith","icon":"🗿","x_px":1156.54,"y_px":585.61,"note":"An ancient monolith. It has an inscription, but no one can translate it:\n
ᢟᢦᡱᠵᠯᡟᡰᡕ᠐ᠠᠻᢜᡟᡒᡱᡍᡳᡰᢀᢥ᠐ᢁᡯ᠑ᡐᢦᠮᠪᡳᢡᠼᢓᠱᢐᡮᠧᡯᠦᠩᠼᡯᡴᠡᡭᡳᡭᢤᡕᢁᠡᡗᠵᢠᠯᠡᠦᡰᠳᡲᡝᠻᡟᡒ᠑ᡕᠠᢠᡐᢡ
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1990980,-1503540]},"properties":{"id":156,"type":"statues","name":"Zilukkhath Monument","icon":"🗿","x_px":663.66,"y_px":501.18,"note":"An ancient monument. It has an inscription, but no one can translate it:\n
የጠፐጰከሰለነሠፈዐአነሐዐጰዘደ ሰበረከ ጸወተ ጰተየፈፈመሠገፈፀሀገፈጸፈመገኀ ፐረገጰአረኀቀ በረየ
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4082700,-1616100]},"properties":{"id":157,"type":"statues","name":"Shrachu Runestone","icon":"🗿","x_px":1360.9,"y_px":538.7,"note":"An ancient runestone. It has an inscription, but no one can translate it:\n
ⳃⳁⳲⳫ ⳾ⳫⲸⲾⲺⳆⳌⲺⳖⳆⳭ ⳞⳀ⳥Ⳁⳃ⳧ Ⳛ⳹⳧ⲾⲲⲴⳆ⳥Ⳗ ⳠⳫⳔⳊ⳾ⳐⳖⲲ⳾⳥ ⳃⳂⳜⳒ⳹ⳠⲸⳒⳜⳤ⳧ⳠⳤⲲⲶⳚⲸ⳩ Ⳡ⳾ⲶⳘⳈⳎⳁ⳹Ⳃ⳩ ⳖⳤⳁⳤⳌⳃⳲⳐⳫ
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4157940,-1423590]},"properties":{"id":158,"type":"statues","name":"Mucrodog Statue","icon":"🗿","x_px":1385.98,"y_px":474.53,"note":"An ancient statue. It has an inscription, but no one can translate it:\n
\udc16\ud802 \udc12\udc13\udc02𐠼\ud802𐠵𐠌𐠑\udc1a \udc28𐠑 \ud802\ud802\ud802\ud802𐠲\udc2c\ud802 \ud802\ud802𐠊\ud802\ud802𐠟𐠓𐠞𐠍\udc2a𐠝\udc33𐠈\ud802𐠖
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1459020,-890430]},"properties":{"id":159,"type":"statues","name":"Asunbeyka Megalith","icon":"🗿","x_px":486.34,"y_px":296.81,"note":"An ancient megalith. It has an inscription, but no one can translate it:\n
ᡎᢂᢛᡖᠩᢞᡝᢞᠡᢒᡰᡁᠪᡒᡞᠵᢏᠪᠿᢐᠽᠩᠾᢀᠡᠰᠮᠡᡞᡕᠨᡓᡲᢏᢥᡡᢏᢛᡖᠩᡟᠠ᠑ᠦᢠᠯᠳᠧᡏᢡᠩᢋᡐᠿᡝᠭᡴᢋᡕ᠀ᡮᠾᠵᠨᡡᢁᠨᠩᢁᠡᢥᡎᢦᠱ᠀ᡗᡖᡠᡜᡑᠽᡐᡠ᠒ᡠᠨᡖᢁᡑᡡᢋᠮᠠᡟᢢᢢᡎᡆᠾ
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[776820,-1064070]},"properties":{"id":160,"type":"statues","name":"Sharag Megalith","icon":"🗿","x_px":258.94,"y_px":354.69,"note":"An ancient megalith. It has an inscription, but no one can translate it:\n
༡༈༂༧༴༂༳༶༂༈༯༢༥༦༿༡༼༆༤༮༦༑༩༕༅༄༻༫༠༖༸༯༨༬༈༷༆༰༨༖༿༰༷༶༯༹༷༊༣༷༩༒༊༮༼༙༰༉༾༫༘ༀ༤༚༃༌༬༕༣༽༉༚༩༨༃༬༇༢༦༷༽༇༁༡༌༇༜༹༃༠༭༽༖༪༙
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4262400,-1683600]},"properties":{"id":161,"type":"statues","name":"Churon Obelisk","icon":"🗿","x_px":1420.8,"y_px":561.2,"note":"An ancient obelisk. It has an inscription, but no one can translate it:\n
\ud802𐠒\udc37\udc0b\udc2b\udc11\udc0d\udc21𐠷𐠗\udc37𐠤\udc2b𐠗 \udc16 \udc2c\udc21\ud802\ud802 𐠣\ud802\ud802\ud802\ud802\ud802𐠧\udc2e\udc1b\udc04\ud802𐠰\ud802 \ud802𐠖𐠏\ud802\ud802𐠗\ud802𐠚\ud802𐠌\ud802\ud802
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4026600,-415200]},"properties":{"id":162,"type":"statues","name":"Yagith Sculpture","icon":"🗿","x_px":1342.2,"y_px":138.4,"note":"An ancient sculpture. It has an inscription, but no one can translate it:\n
ዘነ ደጰደዐሰ አረገየሐአቀሰሐየሀዐአበጠ ወለቀ ፀረደኀሀዘጸወበጸሰአፈተኀመአመኀ ፀጸሰአሐፐበሀዘጰቀፈሰፀጠአገ ፀ ሐተመቀበፀ ዘ ጸተሀ ጰ
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2981520,-585000]},"properties":{"id":163,"type":"statues","name":"Tebh'z Effigy","icon":"🗿","x_px":993.84,"y_px":195,"note":"An ancient effigy. It has an inscription, but no one can translate it:\n
ⲾⳄⳠⲶⲸⳂⳆⳐⳈⳃⳌⳲⳎⳤⲴⳒⳜⳢⳲ ⳤⲸⳢⳜ⳩ⳔⳭⳔⳊ⳹ⳜⳬⳫⳞⳫ⳾ⳞⳀ⳾ⲸⳚ Ⲹ⳧ⳲⲺⳈ ⳈⳊ ⳩Ⳁ⳾Ⳝ
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3456210,-937320]},"properties":{"id":164,"type":"ruins","name":"Ruined Settlement","icon":"🏺","x_px":1152.07,"y_px":312.44,"note":"Ruins of an ancient settlement. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2497260,-1352970]},"properties":{"id":165,"type":"ruins","name":"Ruined Outpost","icon":"🏺","x_px":832.42,"y_px":450.99,"note":"Ruins of an ancient outpost. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4001610,-1285050]},"properties":{"id":166,"type":"ruins","name":"Ruined Fortress","icon":"🏺","x_px":1333.87,"y_px":428.35,"note":"Ruins of an ancient fortress. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4105410,-680730]},"properties":{"id":167,"type":"ruins","name":"Ruined Mausoleum","icon":"🏺","x_px":1368.47,"y_px":226.91,"note":"Ruins of an ancient mausoleum. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2374200,-1710600]},"properties":{"id":168,"type":"ruins","name":"Ruined Temple","icon":"🏺","x_px":791.4,"y_px":570.2,"note":"Ruins of an ancient temple. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3606060,-1674090]},"properties":{"id":169,"type":"ruins","name":"Ruined Settlement","icon":"🏺","x_px":1202.02,"y_px":558.03,"note":"Ruins of an ancient settlement. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4020540,-1018530]},"properties":{"id":170,"type":"ruins","name":"Ruined Fortification","icon":"🏺","x_px":1340.18,"y_px":339.51,"note":"Ruins of an ancient fortification. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3169170,-1878780]},"properties":{"id":171,"type":"ruins","name":"Ruined Fort","icon":"🏺","x_px":1056.39,"y_px":626.26,"note":"Ruins of an ancient fort. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[870660,-1093350]},"properties":{"id":172,"type":"ruins","name":"Ruined Castle","icon":"🏺","x_px":290.22,"y_px":364.45,"note":"Ruins of an ancient castle. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3761190,-537600]},"properties":{"id":173,"type":"ruins","name":"Ruined Castle","icon":"🏺","x_px":1253.73,"y_px":179.2,"note":"Ruins of an ancient castle. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2452530,-1774740]},"properties":{"id":174,"type":"ruins","name":"Ruined City","icon":"🏺","x_px":817.51,"y_px":591.58,"note":"Ruins of an ancient city. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1911150,-1345380]},"properties":{"id":175,"type":"ruins","name":"Ruined Fort","icon":"🏺","x_px":637.05,"y_px":448.46,"note":"Ruins of an ancient fort. Untold riches may lie within."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2338410,-788640]},"properties":{"id":176,"type":"libraries","name":"Nubod Library","icon":"📚","x_px":779.47,"y_px":262.88,"note":"A vast collection of knowledge, including many rare and ancient tomes."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2355930,-684540]},"properties":{"id":177,"type":"libraries","name":"Qidkakh Library","icon":"📚","x_px":785.31,"y_px":228.18,"note":"A vast collection of knowledge, including many rare and ancient tomes."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3032460,-1232010]},"properties":{"id":178,"type":"libraries","name":"Shretho Library","icon":"📚","x_px":1010.82,"y_px":410.67,"note":"A vast collection of knowledge, including many rare and ancient tomes."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1548180,-792990]},"properties":{"id":179,"type":"libraries","name":"Buyli Library","icon":"📚","x_px":516.06,"y_px":264.33,"note":"A vast collection of knowledge, including many rare and ancient tomes."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3016800,-636630]},"properties":{"id":180,"type":"libraries","name":"Tlauggaustheas Library","icon":"📚","x_px":1005.6,"y_px":212.21,"note":"A vast collection of knowledge, including many rare and ancient tomes."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3215370,-2104170]},"properties":{"id":181,"type":"libraries","name":"Szeknurhir Archive","icon":"📚","x_px":1071.79,"y_px":701.39,"note":"A vast collection of knowledge, including many rare and ancient tomes."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1309110,-2028330]},"properties":{"id":182,"type":"libraries","name":"Gatharbhat Library","icon":"📚","x_px":436.37,"y_px":676.11,"note":"A vast collection of knowledge, including many rare and ancient tomes."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1874040,-1453920]},"properties":{"id":183,"type":"circuses","name":"Travelling World-famous Circus","icon":"🎪","x_px":624.68,"y_px":484.64,"note":"Roll up, roll up, this world-famous circus is here for a limited time only."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1767060,-1835670]},"properties":{"id":184,"type":"jousts","name":"Giburag Tournament","icon":"🤺","x_px":589.02,"y_px":611.89,"note":"Warriors from around the land gather for a tournament of might in Giburag, with fame, fortune and favour on offer to the victor."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1508070,-891780]},"properties":{"id":185,"type":"fairs","name":"Toprak Fair","icon":"🎠","x_px":502.69,"y_px":297.26,"note":"A fair is being held in Toprak, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[671160,-927900]},"properties":{"id":186,"type":"fairs","name":"Guzarbiz Fair","icon":"🎠","x_px":223.72,"y_px":309.3,"note":"A fair is being held in Guzarbiz, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4019970,-1183380]},"properties":{"id":187,"type":"fairs","name":"Fillelorana Fair","icon":"🎠","x_px":1339.99,"y_px":394.46,"note":"A fair is being held in Fillelorana, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3043320,-615420]},"properties":{"id":188,"type":"fairs","name":"Gnidurth Fair","icon":"🎠","x_px":1014.44,"y_px":205.14,"note":"A fair is being held in Gnidurth, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2355570,-1464540]},"properties":{"id":189,"type":"fairs","name":"Ranch Fair","icon":"🎠","x_px":785.19,"y_px":488.18,"note":"A fair is being held in Ranch, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3615660,-472770]},"properties":{"id":190,"type":"fairs","name":"Ollarondraa Fair","icon":"🎠","x_px":1205.22,"y_px":157.59,"note":"A fair is being held in Ollarondraa, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3019440,-1885260]},"properties":{"id":191,"type":"fairs","name":"Qacazarros Fair","icon":"🎠","x_px":1006.48,"y_px":628.42,"note":"A fair is being held in Qacazarros, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3062640,-1690920]},"properties":{"id":192,"type":"fairs","name":"Chel'sh Fair","icon":"🎠","x_px":1020.88,"y_px":563.64,"note":"A fair is being held in Chel'sh, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2250930,-771540]},"properties":{"id":193,"type":"fairs","name":"Zurgekkuss Fair","icon":"🎠","x_px":750.31,"y_px":257.18,"note":"A fair is being held in Zurgekkuss, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3793530,-1617930]},"properties":{"id":194,"type":"fairs","name":"Rour Fair","icon":"🎠","x_px":1264.51,"y_px":539.31,"note":"A fair is being held in Rour, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3635550,-726540]},"properties":{"id":195,"type":"fairs","name":"Triz'ruhn Fair","icon":"🎠","x_px":1211.85,"y_px":242.18,"note":"A fair is being held in Triz'ruhn, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2746140,-588150]},"properties":{"id":196,"type":"fairs","name":"Vazad Fair","icon":"🎠","x_px":915.38,"y_px":196.05,"note":"A fair is being held in Vazad, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3642930,-1532160]},"properties":{"id":197,"type":"fairs","name":"Likat'sal Fair","icon":"🎠","x_px":1214.31,"y_px":510.72,"note":"A fair is being held in Likat'sal, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1262430,-633210]},"properties":{"id":198,"type":"fairs","name":"Dobaduzun Fair","icon":"🎠","x_px":420.81,"y_px":211.07,"note":"A fair is being held in Dobaduzun, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2350500,-1039950]},"properties":{"id":199,"type":"fairs","name":"Issazal Fair","icon":"🎠","x_px":783.5,"y_px":346.65,"note":"A fair is being held in Issazal, with all manner of local and foreign goods and services on offer."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3808710,-1823040]},"properties":{"id":200,"type":"canoes","name":"Minor Jetty","icon":"🛶","x_px":1269.57,"y_px":607.68,"note":"A small location along the Cesecad River to launch boats from sits here, along with a weary looking owner, willing to sell passage along the river."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3424680,-1041390]},"properties":{"id":201,"type":"migration","name":"Goats migration","icon":"🐗","x_px":1141.56,"y_px":347.13,"note":"A huge group of goats are migrating, whether part of their annual routine, or something more extraordinary."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[836520,-1412400]},"properties":{"id":202,"type":"migration","name":"Wolves migration","icon":"🐗","x_px":278.84,"y_px":470.8,"note":"A huge group of wolves are migrating, whether part of their annual routine, or something more extraordinary."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3228900,-381450]},"properties":{"id":203,"type":"migration","name":"Dogs migration","icon":"🐗","x_px":1076.3,"y_px":127.15,"note":"A huge group of dogs are migrating, whether part of their annual routine, or something more extraordinary."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1241190,-1305780]},"properties":{"id":204,"type":"mirage","name":"Distant mirage","icon":"💦","x_px":413.73,"y_px":435.26,"note":"This distant mirage has been luring travellers out of their way for eons."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3423150,-1131780]},"properties":{"id":205,"type":"mirage","name":"Diaphanous mirage","icon":"💦","x_px":1141.05,"y_px":377.26,"note":"This diaphanous mirage has been luring travellers out of their way for eons."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1411560,-1449090]},"properties":{"id":206,"type":"mirage","name":"Illusory mirage","icon":"💦","x_px":470.52,"y_px":483.03,"note":"This illusory mirage has been luring travellers out of their way for eons."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3399810,-1417770]},"properties":{"id":207,"type":"mirage","name":"Distant mirage","icon":"💦","x_px":1133.27,"y_px":472.59,"note":"This distant mirage has been luring travellers out of their way for eons."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3340020,-1334160]},"properties":{"id":208,"type":"mirage","name":"Illusory mirage","icon":"💦","x_px":1113.34,"y_px":444.72,"note":"This illusory mirage has been luring travellers out of their way for eons."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1105860,-1263570]},"properties":{"id":209,"type":"caves","name":"Castleho Chasm","icon":"🦇","x_px":368.62,"y_px":421.19,"note":"The Castleho Chasm. Locals claim that it is totally empty."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3467100,-1065810]},"properties":{"id":210,"type":"caves","name":"Klear Fracture","icon":"🦇","x_px":1155.7,"y_px":355.27,"note":"The Klear Fracture. Locals claim that it is slowly filling with lava."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3638730,-1386540]},"properties":{"id":211,"type":"caves","name":"Chox Ravine","icon":"🦇","x_px":1212.91,"y_px":462.18,"note":"The Chox Ravine. Locals claim that it is a good spot to hid treasure."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2155860,-1048680]},"properties":{"id":212,"type":"portals","name":"Cerinoguz Portal","icon":"🌀","x_px":718.62,"y_px":349.56,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3538110,-2004690]},"properties":{"id":213,"type":"portals","name":"Allasu Portal","icon":"🌀","x_px":1179.37,"y_px":668.23,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[979170,-683130]},"properties":{"id":214,"type":"portals","name":"Korsekibi Portal","icon":"🌀","x_px":326.39,"y_px":227.71,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[672000,-785700]},"properties":{"id":215,"type":"portals","name":"Ayansazka Portal","icon":"🌀","x_px":224,"y_px":261.9,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1009320,-1072680]},"properties":{"id":216,"type":"portals","name":"Kholed Portal","icon":"🌀","x_px":336.44,"y_px":357.56,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4019460,-1881180]},"properties":{"id":217,"type":"portals","name":"Saqs Portal","icon":"🌀","x_px":1339.82,"y_px":627.06,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2611140,-1893270]},"properties":{"id":218,"type":"portals","name":"Eyaykut Portal","icon":"🌀","x_px":870.38,"y_px":631.09,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2536110,-1687440]},"properties":{"id":219,"type":"portals","name":"Balta Portal","icon":"🌀","x_px":845.37,"y_px":562.48,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3903060,-1865760]},"properties":{"id":220,"type":"portals","name":"Aikaveeh Portal","icon":"🌀","x_px":1301.02,"y_px":621.92,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[709830,-790470]},"properties":{"id":221,"type":"portals","name":"Arerci Portal","icon":"🌀","x_px":236.61,"y_px":263.49,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2306670,-1009860]},"properties":{"id":222,"type":"portals","name":"Rillen Portal","icon":"🌀","x_px":768.89,"y_px":336.62,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2629830,-1924410]},"properties":{"id":223,"type":"portals","name":"Beyli Portal","icon":"🌀","x_px":876.61,"y_px":641.47,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3925020,-861450]},"properties":{"id":224,"type":"portals","name":"Ormnas Portal","icon":"🌀","x_px":1308.34,"y_px":287.15,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2194440,-796740]},"properties":{"id":225,"type":"portals","name":"Shatushin Portal","icon":"🌀","x_px":731.48,"y_px":265.58,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4037430,-1731000]},"properties":{"id":226,"type":"portals","name":"Ralit Portal","icon":"🌀","x_px":1345.81,"y_px":577,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2381820,-1596990]},"properties":{"id":227,"type":"portals","name":"Duyoltale Portal","icon":"🌀","x_px":793.94,"y_px":532.33,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2744850,-1474980]},"properties":{"id":228,"type":"portals","name":"Zhazru Portal","icon":"🌀","x_px":914.95,"y_px":491.66,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2372130,-1384080]},"properties":{"id":229,"type":"portals","name":"Rhiaqeshu Portal","icon":"🌀","x_px":790.71,"y_px":461.36,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2891430,-796500]},"properties":{"id":230,"type":"portals","name":"Ugvidh Portal","icon":"🌀","x_px":963.81,"y_px":265.5,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4106640,-1241700]},"properties":{"id":231,"type":"portals","name":"Nelkar Portal","icon":"🌀","x_px":1368.88,"y_px":413.9,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2465070,-1665540]},"properties":{"id":232,"type":"portals","name":"Kalkaya Portal","icon":"🌀","x_px":821.69,"y_px":555.18,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4102290,-647970]},"properties":{"id":233,"type":"portals","name":"Barastherwin Portal","icon":"🌀","x_px":1367.43,"y_px":215.99,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[680280,-1666890]},"properties":{"id":234,"type":"portals","name":"Ukthararbil Portal","icon":"🌀","x_px":226.76,"y_px":555.63,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2869800,-1317900]},"properties":{"id":235,"type":"portals","name":"Lhivheesh Portal","icon":"🌀","x_px":956.6,"y_px":439.3,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2426010,-1756410]},"properties":{"id":236,"type":"portals","name":"Ayruk Portal","icon":"🌀","x_px":808.67,"y_px":585.47,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4077450,-1063890]},"properties":{"id":237,"type":"portals","name":"Ishsaleanle Portal","icon":"🌀","x_px":1359.15,"y_px":354.63,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2622270,-683850]},"properties":{"id":238,"type":"portals","name":"Brazon Portal","icon":"🌀","x_px":874.09,"y_px":227.95,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1760970,-829290]},"properties":{"id":239,"type":"portals","name":"Eylibiler Portal","icon":"🌀","x_px":586.99,"y_px":276.43,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2608260,-1652910]},"properties":{"id":240,"type":"portals","name":"Qhaiq's Portal","icon":"🌀","x_px":869.42,"y_px":550.97,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2280300,-1140510]},"properties":{"id":241,"type":"portals","name":"Nashrishaph Portal","icon":"🌀","x_px":760.1,"y_px":380.17,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[676500,-1271910]},"properties":{"id":242,"type":"portals","name":"Bizirbilga Portal","icon":"🌀","x_px":225.5,"y_px":423.97,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1848090,-902850]},"properties":{"id":243,"type":"portals","name":"Emirtedie Portal","icon":"🌀","x_px":616.03,"y_px":300.95,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2368890,-828030]},"properties":{"id":244,"type":"portals","name":"Brolko Portal","icon":"🌀","x_px":789.63,"y_px":276.01,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1423500,-2091270]},"properties":{"id":245,"type":"portals","name":"Giradusha Portal","icon":"🌀","x_px":474.5,"y_px":697.09,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2341710,-1821150]},"properties":{"id":246,"type":"portals","name":"Kum Yurte Portal","icon":"🌀","x_px":780.57,"y_px":607.05,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4222020,-1633530]},"properties":{"id":247,"type":"portals","name":"Dhalg Portal","icon":"🌀","x_px":1407.34,"y_px":544.51,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1019820,-1659750]},"properties":{"id":248,"type":"portals","name":"Bundush Portal","icon":"🌀","x_px":339.94,"y_px":553.25,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2845650,-1582110]},"properties":{"id":249,"type":"portals","name":"Azallash Portal","icon":"🌀","x_px":948.55,"y_px":527.37,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3342240,-2053410]},"properties":{"id":250,"type":"portals","name":"Zakke Portal","icon":"🌀","x_px":1114.08,"y_px":684.47,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[619620,-1636860]},"properties":{"id":251,"type":"portals","name":"Kholaram Portal","icon":"🌀","x_px":206.54,"y_px":545.62,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1677900,-664950]},"properties":{"id":252,"type":"portals","name":"Desensu Portal","icon":"🌀","x_px":559.3,"y_px":221.65,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3006030,-1644480]},"properties":{"id":253,"type":"portals","name":"Szils Portal","icon":"🌀","x_px":1002.01,"y_px":548.16,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1837020,-1819080]},"properties":{"id":254,"type":"portals","name":"Zakinb Portal","icon":"🌀","x_px":612.34,"y_px":606.36,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2133210,-994620]},"properties":{"id":255,"type":"portals","name":"Boyayrasu Portal","icon":"🌀","x_px":711.07,"y_px":331.54,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1751760,-637050]},"properties":{"id":256,"type":"portals","name":"Kayvar Portal","icon":"🌀","x_px":583.92,"y_px":212.35,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1533450,-2012190]},"properties":{"id":257,"type":"portals","name":"Shathaz Portal","icon":"🌀","x_px":511.15,"y_px":670.73,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2365590,-1402470]},"properties":{"id":258,"type":"portals","name":"Zhiasa Portal","icon":"🌀","x_px":788.53,"y_px":467.49,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2616600,-669300]},"properties":{"id":259,"type":"portals","name":"Chugragh Portal","icon":"🌀","x_px":872.2,"y_px":223.1,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3207540,-1824600]},"properties":{"id":260,"type":"portals","name":"Qeqrateb Portal","icon":"🌀","x_px":1069.18,"y_px":608.2,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3557670,-2096760]},"properties":{"id":261,"type":"portals","name":"Qhok'suvo Portal","icon":"🌀","x_px":1185.89,"y_px":698.92,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[920730,-1655610]},"properties":{"id":262,"type":"portals","name":"Alazinduna Portal","icon":"🌀","x_px":306.91,"y_px":551.87,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1663800,-636300]},"properties":{"id":263,"type":"portals","name":"Ekinsuman Portal","icon":"🌀","x_px":554.6,"y_px":212.1,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1613430,-1810530]},"properties":{"id":264,"type":"portals","name":"Bizir Portal","icon":"🌀","x_px":537.81,"y_px":603.51,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2388900,-1467000]},"properties":{"id":265,"type":"portals","name":"Shranqel Portal","icon":"🌀","x_px":796.3,"y_px":489,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[634380,-1660710]},"properties":{"id":266,"type":"portals","name":"Nakil Portal","icon":"🌀","x_px":211.46,"y_px":553.57,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2179440,-617880]},"properties":{"id":267,"type":"portals","name":"Harji Portal","icon":"🌀","x_px":726.48,"y_px":205.96,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2924400,-770310]},"properties":{"id":268,"type":"portals","name":"Zradrel Portal","icon":"🌀","x_px":974.8,"y_px":256.77,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3576300,-1964280]},"properties":{"id":269,"type":"portals","name":"Nench Portal","icon":"🌀","x_px":1192.1,"y_px":654.76,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3928830,-1027230]},"properties":{"id":270,"type":"portals","name":"Jamsebel Portal","icon":"🌀","x_px":1309.61,"y_px":342.41,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1109190,-1793310]},"properties":{"id":271,"type":"portals","name":"Bilbuzandum Portal","icon":"🌀","x_px":369.73,"y_px":597.77,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3938880,-1321620]},"properties":{"id":272,"type":"portals","name":"Crild Portal","icon":"🌀","x_px":1312.96,"y_px":440.54,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2683830,-1947300]},"properties":{"id":273,"type":"portals","name":"Bozeslada Portal","icon":"🌀","x_px":894.61,"y_px":649.1,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2410140,-1675080]},"properties":{"id":274,"type":"portals","name":"Yaltaybur Portal","icon":"🌀","x_px":803.38,"y_px":558.36,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3527790,-2101350]},"properties":{"id":275,"type":"portals","name":"Sorho Portal","icon":"🌀","x_px":1175.93,"y_px":700.45,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3117690,-2113170]},"properties":{"id":276,"type":"portals","name":"Nenchiel Portal","icon":"🌀","x_px":1039.23,"y_px":704.39,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4158990,-1354860]},"properties":{"id":277,"type":"portals","name":"Khar Portal","icon":"🌀","x_px":1386.33,"y_px":451.62,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1862580,-664050]},"properties":{"id":278,"type":"portals","name":"Deresedi Portal","icon":"🌀","x_px":620.86,"y_px":221.35,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2834490,-689400]},"properties":{"id":279,"type":"portals","name":"Vergol Portal","icon":"🌀","x_px":944.83,"y_px":229.8,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1893150,-693510]},"properties":{"id":280,"type":"portals","name":"Buyram Portal","icon":"🌀","x_px":631.05,"y_px":231.17,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2773710,-796230]},"properties":{"id":281,"type":"portals","name":"Morbredh Portal","icon":"🌀","x_px":924.57,"y_px":265.41,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1488450,-646260]},"properties":{"id":282,"type":"portals","name":"Baykutlu Portal","icon":"🌀","x_px":496.15,"y_px":215.42,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1835460,-1872180]},"properties":{"id":283,"type":"portals","name":"Kibunabun Portal","icon":"🌀","x_px":611.82,"y_px":624.06,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2991270,-618090]},"properties":{"id":284,"type":"portals","name":"Ulheidanntyr Portal","icon":"🌀","x_px":997.09,"y_px":206.03,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1063470,-1720260]},"properties":{"id":285,"type":"portals","name":"Nabar Portal","icon":"🌀","x_px":354.49,"y_px":573.42,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2495160,-1776900]},"properties":{"id":286,"type":"portals","name":"Sarpkoyka Portal","icon":"🌀","x_px":831.72,"y_px":592.3,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2696490,-1641030]},"properties":{"id":287,"type":"portals","name":"Shranrud Portal","icon":"🌀","x_px":898.83,"y_px":547.01,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[936990,-694980]},"properties":{"id":288,"type":"portals","name":"Kozok Portal","icon":"🌀","x_px":312.33,"y_px":231.66,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3492480,-2015490]},"properties":{"id":289,"type":"portals","name":"Yithaqes Portal","icon":"🌀","x_px":1164.16,"y_px":671.83,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3898440,-1024920]},"properties":{"id":290,"type":"portals","name":"Thel-Zed Portal","icon":"🌀","x_px":1299.48,"y_px":341.64,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1805400,-686040]},"properties":{"id":291,"type":"portals","name":"Erdelen Portal","icon":"🌀","x_px":601.8,"y_px":228.68,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[586740,-1596270]},"properties":{"id":292,"type":"portals","name":"Narakz Portal","icon":"🌀","x_px":195.58,"y_px":532.09,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3406140,-646800]},"properties":{"id":293,"type":"portals","name":"Liz'rirka Portal","icon":"🌀","x_px":1135.38,"y_px":215.6,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[734100,-858570]},"properties":{"id":294,"type":"portals","name":"Aleli Portal","icon":"🌀","x_px":244.7,"y_px":286.19,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3565950,-1949670]},"properties":{"id":295,"type":"portals","name":"Zhizsa Portal","icon":"🌀","x_px":1188.65,"y_px":649.89,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2081010,-1350480]},"properties":{"id":296,"type":"portals","name":"Dumanteme Portal","icon":"🌀","x_px":693.67,"y_px":450.16,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2973480,-653760]},"properties":{"id":297,"type":"portals","name":"Ken'arond Portal","icon":"🌀","x_px":991.16,"y_px":217.92,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[736740,-871200]},"properties":{"id":298,"type":"portals","name":"Asbesenka Portal","icon":"🌀","x_px":245.58,"y_px":290.4,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3135750,-2062320]},"properties":{"id":299,"type":"portals","name":"Lasha Portal","icon":"🌀","x_px":1045.25,"y_px":687.44,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1373670,-1906350]},"properties":{"id":300,"type":"portals","name":"Nuleddinar Portal","icon":"🌀","x_px":457.89,"y_px":635.45,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1320720,-1788840]},"properties":{"id":301,"type":"portals","name":"Naram Portal","icon":"🌀","x_px":440.24,"y_px":596.28,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2858190,-715020]},"properties":{"id":302,"type":"portals","name":"Krag Portal","icon":"🌀","x_px":952.73,"y_px":238.34,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2350770,-835500]},"properties":{"id":303,"type":"portals","name":"Sa'jussiph Portal","icon":"🌀","x_px":783.59,"y_px":278.5,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1621710,-1796730]},"properties":{"id":304,"type":"portals","name":"Gathizdus Portal","icon":"🌀","x_px":540.57,"y_px":598.91,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1344240,-1964940]},"properties":{"id":305,"type":"portals","name":"Bundushund Portal","icon":"🌀","x_px":448.08,"y_px":654.98,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2547930,-1976100]},"properties":{"id":306,"type":"portals","name":"Kanovatev Portal","icon":"🌀","x_px":849.31,"y_px":658.7,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2601900,-1759500]},"properties":{"id":307,"type":"portals","name":"Banyalaz Portal","icon":"🌀","x_px":867.3,"y_px":586.5,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[930540,-1692000]},"properties":{"id":308,"type":"portals","name":"Naleddum Portal","icon":"🌀","x_px":310.18,"y_px":564,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2603670,-1252500]},"properties":{"id":309,"type":"portals","name":"Szeezsad Portal","icon":"🌀","x_px":867.89,"y_px":417.5,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1545360,-647040]},"properties":{"id":310,"type":"portals","name":"Ultun Ok Portal","icon":"🌀","x_px":515.12,"y_px":215.68,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1595070,-1806180]},"properties":{"id":311,"type":"portals","name":"Gazinb Portal","icon":"🌀","x_px":531.69,"y_px":602.06,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3853320,-1022730]},"properties":{"id":312,"type":"portals","name":"Himseliese Portal","icon":"🌀","x_px":1284.44,"y_px":340.91,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1395660,-2092770]},"properties":{"id":313,"type":"portals","name":"Gurazar Portal","icon":"🌀","x_px":465.22,"y_px":697.59,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2813580,-1159740]},"properties":{"id":314,"type":"portals","name":"Rhiced Portal","icon":"🌀","x_px":937.86,"y_px":386.58,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3587190,-2005110]},"properties":{"id":315,"type":"portals","name":"Rezhir Portal","icon":"🌀","x_px":1195.73,"y_px":668.37,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3223980,-2080770]},"properties":{"id":316,"type":"portals","name":"Zharis Portal","icon":"🌀","x_px":1074.66,"y_px":693.59,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1255590,-2061660]},"properties":{"id":317,"type":"portals","name":"Shathiz Portal","icon":"🌀","x_px":418.53,"y_px":687.22,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3301050,-462750]},"properties":{"id":318,"type":"portals","name":"Bethanas Portal","icon":"🌀","x_px":1100.35,"y_px":154.25,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2683200,-1555500]},"properties":{"id":319,"type":"portals","name":"Eshacar Portal","icon":"🌀","x_px":894.4,"y_px":518.5,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1260120,-664890]},"properties":{"id":320,"type":"portals","name":"Dobaniyol Portal","icon":"🌀","x_px":420.04,"y_px":221.63,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4240230,-1080930]},"properties":{"id":321,"type":"portals","name":"Brityshanas Portal","icon":"🌀","x_px":1413.41,"y_px":360.31,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3773340,-1781790]},"properties":{"id":322,"type":"portals","name":"Liallieqo Portal","icon":"🌀","x_px":1257.78,"y_px":593.93,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[876150,-1653960]},"properties":{"id":323,"type":"portals","name":"Khunbuzan Portal","icon":"🌀","x_px":292.05,"y_px":551.32,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2963040,-1737690]},"properties":{"id":324,"type":"portals","name":"Yek'sier Portal","icon":"🌀","x_px":987.68,"y_px":579.23,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2603850,-815760]},"properties":{"id":325,"type":"portals","name":"Lubod Portal","icon":"🌀","x_px":867.95,"y_px":271.92,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1182420,-1792740]},"properties":{"id":326,"type":"portals","name":"Namunz Portal","icon":"🌀","x_px":394.14,"y_px":597.58,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4257480,-1600200]},"properties":{"id":327,"type":"portals","name":"Dhalgnod Portal","icon":"🌀","x_px":1419.16,"y_px":533.4,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1299300,-1942380]},"properties":{"id":328,"type":"portals","name":"Bumunz Portal","icon":"🌀","x_px":433.1,"y_px":647.46,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1600140,-1051920]},"properties":{"id":329,"type":"portals","name":"Doba Portal","icon":"🌀","x_px":533.38,"y_px":350.64,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3419160,-2110500]},"properties":{"id":330,"type":"portals","name":"Yera Portal","icon":"🌀","x_px":1139.72,"y_px":703.5,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2225850,-871350]},"properties":{"id":331,"type":"portals","name":"Srar'tu Portal","icon":"🌀","x_px":741.95,"y_px":290.45,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3079110,-600510]},"properties":{"id":332,"type":"portals","name":"Fil-Zedrait Portal","icon":"🌀","x_px":1026.37,"y_px":200.17,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[874890,-791370]},"properties":{"id":333,"type":"portals","name":"Dobayanar Portal","icon":"🌀","x_px":291.63,"y_px":263.79,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2932770,-1699950]},"properties":{"id":334,"type":"portals","name":"Khri Portal","icon":"🌀","x_px":977.59,"y_px":566.65,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1159440,-1855980]},"properties":{"id":335,"type":"portals","name":"Nulgab Portal","icon":"🌀","x_px":386.48,"y_px":618.66,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4218150,-1619130]},"properties":{"id":336,"type":"portals","name":"Qash Portal","icon":"🌀","x_px":1406.05,"y_px":539.71,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1226370,-1881060]},"properties":{"id":337,"type":"portals","name":"Khurazdus Portal","icon":"🌀","x_px":408.79,"y_px":627.02,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1081710,-1803120]},"properties":{"id":338,"type":"portals","name":"Kharbhizd Portal","icon":"🌀","x_px":360.57,"y_px":601.04,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2602440,-1802490]},"properties":{"id":339,"type":"portals","name":"Alkakanya Portal","icon":"🌀","x_px":867.48,"y_px":600.83,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2554170,-1846320]},"properties":{"id":340,"type":"portals","name":"Buyru Portal","icon":"🌀","x_px":851.39,"y_px":615.44,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2488290,-751860]},"properties":{"id":341,"type":"portals","name":"Kaccog Portal","icon":"🌀","x_px":829.43,"y_px":250.62,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2437950,-1931820]},"properties":{"id":342,"type":"portals","name":"Beybardu Portal","icon":"🌀","x_px":812.65,"y_px":643.94,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2614800,-1260300]},"properties":{"id":343,"type":"portals","name":"Ceeqilraq Portal","icon":"🌀","x_px":871.6,"y_px":420.1,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1279290,-793710]},"properties":{"id":344,"type":"portals","name":"Aydeli Portal","icon":"🌀","x_px":426.43,"y_px":264.57,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3084960,-1769430]},"properties":{"id":345,"type":"portals","name":"Qhotiekot Portal","icon":"🌀","x_px":1028.32,"y_px":589.81,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4250460,-1623450]},"properties":{"id":346,"type":"portals","name":"Bogrolb Portal","icon":"🌀","x_px":1416.82,"y_px":541.15,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1890570,-1899270]},"properties":{"id":347,"type":"portals","name":"Gibunbamunz Portal","icon":"🌀","x_px":630.19,"y_px":633.09,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2194920,-658260]},"properties":{"id":348,"type":"portals","name":"Zagissu Portal","icon":"🌀","x_px":731.64,"y_px":219.42,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3322200,-2002110]},"properties":{"id":349,"type":"portals","name":"Rhizuhil's Portal","icon":"🌀","x_px":1107.4,"y_px":667.37,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1786230,-1826790]},"properties":{"id":350,"type":"portals","name":"Ukthadzar Portal","icon":"🌀","x_px":595.41,"y_px":608.93,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4163370,-1125630]},"properties":{"id":351,"type":"portals","name":"Unerion Portal","icon":"🌀","x_px":1387.79,"y_px":375.21,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3595230,-706380]},"properties":{"id":352,"type":"portals","name":"Memar Portal","icon":"🌀","x_px":1198.41,"y_px":235.46,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1564410,-643740]},"properties":{"id":353,"type":"portals","name":"Devrek Portal","icon":"🌀","x_px":521.47,"y_px":214.58,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1615020,-1061400]},"properties":{"id":354,"type":"portals","name":"Araylalaz Portal","icon":"🌀","x_px":538.34,"y_px":353.8,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2608650,-815790]},"properties":{"id":355,"type":"portals","name":"Azadh Portal","icon":"🌀","x_px":869.55,"y_px":271.93,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1389480,-704250]},"properties":{"id":356,"type":"portals","name":"Derense Portal","icon":"🌀","x_px":463.16,"y_px":234.75,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[652830,-798300]},"properties":{"id":357,"type":"portals","name":"Turkdi Portal","icon":"🌀","x_px":217.61,"y_px":266.1,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2385660,-1752840]},"properties":{"id":358,"type":"portals","name":"Yasura Portal","icon":"🌀","x_px":795.22,"y_px":584.28,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3360120,-1993050]},"properties":{"id":359,"type":"portals","name":"Zhas'tiqei Portal","icon":"🌀","x_px":1120.04,"y_px":664.35,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3898320,-993300]},"properties":{"id":360,"type":"portals","name":"Sahmelsya Portal","icon":"🌀","x_px":1299.44,"y_px":331.1,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4012170,-1522260]},"properties":{"id":361,"type":"portals","name":"Lekid Portal","icon":"🌀","x_px":1337.39,"y_px":507.42,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1304430,-2021970]},"properties":{"id":362,"type":"portals","name":"Bilbunbu Portal","icon":"🌀","x_px":434.81,"y_px":673.99,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1329030,-1890780]},"properties":{"id":363,"type":"portals","name":"Gunbund Portal","icon":"🌀","x_px":443.01,"y_px":630.26,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2631210,-1669260]},"properties":{"id":364,"type":"portals","name":"Cese Portal","icon":"🌀","x_px":877.07,"y_px":556.42,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2828850,-631020]},"properties":{"id":365,"type":"portals","name":"Dodadh Portal","icon":"🌀","x_px":942.95,"y_px":210.34,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3356250,-2109420]},"properties":{"id":366,"type":"portals","name":"Qhenchod Portal","icon":"🌀","x_px":1118.75,"y_px":703.14,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[890220,-1691490]},"properties":{"id":367,"type":"portals","name":"Bumunbazah Portal","icon":"🌀","x_px":296.74,"y_px":563.83,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1981650,-1173240]},"properties":{"id":368,"type":"portals","name":"Eynak Portal","icon":"🌀","x_px":660.55,"y_px":391.08,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2228670,-1608600]},"properties":{"id":369,"type":"portals","name":"Poyli Portal","icon":"🌀","x_px":742.89,"y_px":536.2,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2711040,-752130]},"properties":{"id":370,"type":"portals","name":"Karkuz Portal","icon":"🌀","x_px":903.68,"y_px":250.71,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[773550,-1619250]},"properties":{"id":371,"type":"portals","name":"Shatharb Portal","icon":"🌀","x_px":257.85,"y_px":539.75,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3738300,-1943700]},"properties":{"id":372,"type":"portals","name":"Raqeer Portal","icon":"🌀","x_px":1246.1,"y_px":647.9,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4110000,-738000]},"properties":{"id":373,"type":"portals","name":"Cloibranen Portal","icon":"🌀","x_px":1370,"y_px":246,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1744590,-1870290]},"properties":{"id":374,"type":"portals","name":"Gatharb Portal","icon":"🌀","x_px":581.53,"y_px":623.43,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3681420,-2004540]},"properties":{"id":375,"type":"portals","name":"Qhazhica Portal","icon":"🌀","x_px":1227.14,"y_px":668.18,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[867450,-696420]},"properties":{"id":376,"type":"portals","name":"Kobalaka Portal","icon":"🌀","x_px":289.15,"y_px":232.14,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1675770,-1795140]},"properties":{"id":377,"type":"portals","name":"Ziledzah Portal","icon":"🌀","x_px":558.59,"y_px":598.38,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3952980,-1407510]},"properties":{"id":378,"type":"portals","name":"Szazhikak Portal","icon":"🌀","x_px":1317.66,"y_px":469.17,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4149510,-1248990]},"properties":{"id":379,"type":"portals","name":"Zribul Portal","icon":"🌀","x_px":1383.17,"y_px":416.33,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3059070,-2076330]},"properties":{"id":380,"type":"portals","name":"Nernozihi Portal","icon":"🌀","x_px":1019.69,"y_px":692.11,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1625940,-1858320]},"properties":{"id":381,"type":"portals","name":"Arararam Portal","icon":"🌀","x_px":541.98,"y_px":619.44,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2926470,-1344870]},"properties":{"id":382,"type":"portals","name":"Chixhaqoh Portal","icon":"🌀","x_px":975.49,"y_px":448.29,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4050600,-722400]},"properties":{"id":383,"type":"portals","name":"Kek'thei Portal","icon":"🌀","x_px":1350.2,"y_px":240.8,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3153450,-2066550]},"properties":{"id":384,"type":"portals","name":"Zhavuthon Portal","icon":"🌀","x_px":1051.15,"y_px":688.85,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3212700,-2048130]},"properties":{"id":385,"type":"portals","name":"Yorhisho Portal","icon":"🌀","x_px":1070.9,"y_px":682.71,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2536440,-693990]},"properties":{"id":386,"type":"portals","name":"Gagh Portal","icon":"🌀","x_px":845.48,"y_px":231.33,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2982570,-1441320]},"properties":{"id":387,"type":"portals","name":"Zhizruria Portal","icon":"🌀","x_px":994.19,"y_px":480.44,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1089810,-1736100]},"properties":{"id":388,"type":"portals","name":"Khar Portal","icon":"🌀","x_px":363.27,"y_px":578.7,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3901290,-907500]},"properties":{"id":389,"type":"portals","name":"Orenathari Portal","icon":"🌀","x_px":1300.43,"y_px":302.5,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1722840,-820110]},"properties":{"id":390,"type":"portals","name":"Yara Portal","icon":"🌀","x_px":574.28,"y_px":273.37,"note":"An element of the magic portal system connecting major cities. The portals were installed centuries ago, but still work fine."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3286020,-897840]},"properties":{"id":391,"type":"rifts","name":"Cosmic Rift","icon":"🎆","x_px":1095.34,"y_px":299.28,"note":"A rumoured cosmic rift in this area is causing cracks in reality itself to form."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3369690,-1314300]},"properties":{"id":392,"type":"rifts","name":"Cataclysmic Rift","icon":"🎆","x_px":1123.23,"y_px":438.1,"note":"A rumoured cataclysmic rift in this area is causing an emmissary to step through with an all-powerful relic."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1842690,-1130370]},"properties":{"id":393,"type":"disturbed-burials","name":"Disturbed Burial","icon":"💀","x_px":614.23,"y_px":376.79,"note":"A burial site has been disturbed in this area, causing the dead to rise and attack the living."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1977600,-900600]},"properties":{"id":394,"type":"disturbed-burials","name":"Disturbed Burial","icon":"💀","x_px":659.2,"y_px":300.2,"note":"A burial site has been disturbed in this area, causing the dead to rise and attack the living."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[919770,-816660]},"properties":{"id":395,"type":"disturbed-burials","name":"Disturbed Burial","icon":"💀","x_px":306.59,"y_px":272.22,"note":"A burial site has been disturbed in this area, causing the dead to rise and attack the living."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2112600,-1377690]},"properties":{"id":396,"type":"disturbed-burials","name":"Disturbed Burial","icon":"💀","x_px":704.2,"y_px":459.23,"note":"A burial site has been disturbed in this area, causing the dead to rise and attack the living."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1422480,-2040420]},"properties":{"id":397,"type":"disturbed-burials","name":"Disturbed Burial","icon":"💀","x_px":474.16,"y_px":680.14,"note":"A burial site has been disturbed in this area, causing the dead to rise and attack the living."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3424020,-1487430]},"properties":{"id":398,"type":"necropolises","name":"Pyreaz Cemetery","icon":"🪦","x_px":1141.34,"y_px":495.81,"note":"A sprawling necropolis built within a labyrinthine network of catacombs. Its halls are lined with countless alcoves, each housing the remains of the departed, while the distant sound of rattling bones fills the air."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3045300,-1013640]},"properties":{"id":399,"type":"necropolises","name":"Thult Sepulchre","icon":"🪦","x_px":1015.1,"y_px":337.88,"note":"A sprawling necropolis built within a labyrinthine network of catacombs. Its halls are lined with countless alcoves, each housing the remains of the departed, while the distant sound of rattling bones fills the air."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3198630,-1068660]},"properties":{"id":400,"type":"necropolises","name":"Prestable Graveyard","icon":"🪦","x_px":1066.21,"y_px":356.22,"note":"A towering necropolis adorned with macabre sculptures and guarded by formidable undead sentinels. Its ancient halls house the remains of fallen heroes, entombed alongside their cherished relics."}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2458800,-1116060]},"properties":{"id":401,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":819.6,"y_px":372.02,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1302240,-1259970]},"properties":{"id":402,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":434.08,"y_px":419.99,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2187660,-1844910]},"properties":{"id":403,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":729.22,"y_px":614.97,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1163700,-1045470]},"properties":{"id":404,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":387.9,"y_px":348.49,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2446800,-918480]},"properties":{"id":405,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":815.6,"y_px":306.16,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2731680,-1325970]},"properties":{"id":406,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":910.56,"y_px":441.99,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3643920,-817740]},"properties":{"id":407,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":1214.64,"y_px":272.58,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4196370,-1328940]},"properties":{"id":408,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":1398.79,"y_px":442.98,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3416100,-1924590]},"properties":{"id":409,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":1138.7,"y_px":641.53,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3479130,-1014210]},"properties":{"id":410,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":1159.71,"y_px":338.07,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1394160,-1547400]},"properties":{"id":411,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":464.72,"y_px":515.8,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2174400,-1846500]},"properties":{"id":412,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":724.8,"y_px":615.5,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[3556020,-1643520]},"properties":{"id":413,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":1185.34,"y_px":547.84,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1338150,-1476210]},"properties":{"id":414,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":446.05,"y_px":492.07,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2073420,-1564050]},"properties":{"id":415,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":691.14,"y_px":521.35,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[2748300,-1604880]},"properties":{"id":416,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":916.1,"y_px":534.96,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[971130,-1451850]},"properties":{"id":417,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":323.71,"y_px":483.95,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[850530,-925470]},"properties":{"id":418,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":283.51,"y_px":308.49,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[647580,-1157130]},"properties":{"id":419,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":215.86,"y_px":385.71,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1730520,-844620]},"properties":{"id":420,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":576.84,"y_px":281.54,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[552480,-1711320]},"properties":{"id":421,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":184.16,"y_px":570.44,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[4168290,-1375650]},"properties":{"id":422,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":1389.43,"y_px":458.55,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[1795800,-1525530]},"properties":{"id":423,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":598.6,"y_px":508.51,"note":"
You have encountered a character.
"}},{"type":"Feature","geometry":{"type":"Point","coordinates":[571020,-1011660]},"properties":{"id":424,"type":"encounters","name":"Random encounter","icon":"🧙","x_px":190.34,"y_px":337.22,"note":"
You have encountered a character.
"}}],"metadata":{"crs":"Fantasy Map Cartesian (meters)","mapName":"Tourland","scale":{"distance":3,"unit":"km","meters_per_pixel":3000}}} \ No newline at end of file diff --git a/index.html b/index.html index 2920c16e..eb586055 100644 --- a/index.html +++ b/index.html @@ -6053,6 +6053,14 @@ +
+ + + + + +
+

GeoJSON format is used in GIS tools such as QGIS. Check out @@ -6060,6 +6068,17 @@ for guidance.

+
Export height raster (QGIS)
+
+ +
+

+ Load the .asc in QGIS as a raster layer. Use Raster → Extraction → Contour to make contour lines, + and Raster → Analysis → Hillshade for shaded relief. CRS: Fantasy Map Cartesian (meters). +

+
Export To JSON
diff --git a/modules/io/export.js b/modules/io/export.js index 604a9091..c08a02e9 100644 --- a/modules/io/export.js +++ b/modules/io/export.js @@ -561,7 +561,7 @@ function getFantasyCoordinates(x, y, decimals = 2) { ]; } -function saveGeoJsonCells() { +function buildGeoJsonCells() { const {cells, vertices} = pack; // Calculate meters per pixel based on unit @@ -646,11 +646,16 @@ function saveGeoJsonCells() { json.features.push(feature); }); + return json; +} + +function saveGeoJsonCells() { + const json = buildGeoJsonCells(); const fileName = getFileName("Cells") + ".geojson"; downloadFile(JSON.stringify(json), fileName, "application/json"); } -function saveGeoJsonRoutes() { +function buildGeoJsonRoutes() { const metersPerPixel = getMetersPerPixel(); const features = pack.routes.map(({i, points, group, name = null, type, feature}) => { const coordinates = points.map(([x, y]) => getFantasyCoordinates(x, y, 2)); @@ -674,12 +679,16 @@ function saveGeoJsonRoutes() { } } }; + return json; +} +function saveGeoJsonRoutes() { + const json = buildGeoJsonRoutes(); const fileName = getFileName("Routes") + ".geojson"; downloadFile(JSON.stringify(json), fileName, "application/json"); } -function saveGeoJsonRivers() { +function buildGeoJsonRivers() { const metersPerPixel = getMetersPerPixel(); const features = pack.rivers.map( ({i, cells, points, source, mouth, parent, basin, widthFactor, sourceWidth, discharge, length, width, name, type}) => { @@ -707,21 +716,27 @@ function saveGeoJsonRivers() { } } }; + return json; +} +function saveGeoJsonRivers() { + const json = buildGeoJsonRivers(); const fileName = getFileName("Rivers") + ".geojson"; downloadFile(JSON.stringify(json), fileName, "application/json"); } -function saveGeoJsonMarkers() { +function buildGeoJsonMarkers() { const metersPerPixel = getMetersPerPixel(); const features = pack.markers.map(marker => { const {i, type, icon, x, y, size, fill, stroke} = marker; const coordinates = getFantasyCoordinates(x, y, 2); // Find the associated note if it exists const note = notes.find(note => note.id === `marker${i}`); + const name = note ? note.name : "Unknown"; const properties = { id: i, type, + name, icon, x_px: x, y_px: y, @@ -746,24 +761,28 @@ function saveGeoJsonMarkers() { } } }; + return json; +} +function saveGeoJsonMarkers() { + const json = buildGeoJsonMarkers(); const fileName = getFileName("Markers") + ".geojson"; downloadFile(JSON.stringify(json), fileName, "application/json"); } -function saveGeoJsonBurgs() { +function buildGeoJsonBurgs() { const metersPerPixel = getMetersPerPixel(); const valid = pack.burgs.filter(b => b.i && !b.removed); - + const features = valid.map(b => { const coordinates = getFantasyCoordinates(b.x, b.y, 2); const province = pack.cells.province[b.cell]; const temperature = grid.cells.temp[pack.cells.g[b.cell]]; - + // Calculate world coordinates same as CSV export const xWorld = b.x * metersPerPixel; const yWorld = -b.y * metersPerPixel; - + return { type: "Feature", geometry: {type: "Point", coordinates}, @@ -811,15 +830,19 @@ function saveGeoJsonBurgs() { } } }; + return json; +} +function saveGeoJsonBurgs() { + const json = buildGeoJsonBurgs(); const fileName = getFileName("Burgs") + ".geojson"; downloadFile(JSON.stringify(json), fileName, "application/json"); } -function saveGeoJsonRegiments() { +function buildGeoJsonRegiments() { const metersPerPixel = getMetersPerPixel(); const allRegiments = []; - + // Collect all regiments from all states for (const s of pack.states) { if (!s.i || s.removed || !s.military.length) continue; @@ -827,23 +850,23 @@ function saveGeoJsonRegiments() { allRegiments.push({regiment: r, state: s}); } } - + const features = allRegiments.map(({regiment: r, state: s}) => { const coordinates = getFantasyCoordinates(r.x, r.y, 2); const baseCoordinates = getFantasyCoordinates(r.bx, r.by, 2); - + // Calculate world coordinates same as CSV export const xWorld = r.x * metersPerPixel; const yWorld = -r.y * metersPerPixel; const bxWorld = r.bx * metersPerPixel; const byWorld = -r.by * metersPerPixel; - + // Collect military unit data const units = {}; options.military.forEach(u => { units[u.name] = r.u[u.name] || 0; }); - + return { type: "Feature", geometry: {type: "Point", coordinates}, @@ -885,7 +908,401 @@ function saveGeoJsonRegiments() { } } }; + return json; +} +function saveGeoJsonRegiments() { + const json = buildGeoJsonRegiments(); const fileName = getFileName("Regiments") + ".geojson"; downloadFile(JSON.stringify(json), fileName, "application/json"); -} \ No newline at end of file +} + +// Export heightmap as ESRI ASCII Grid (.asc) for QGIS +function saveAsciiGridHeightmap() { + if (!grid?.cells?.h || !grid.cellsX || !grid.cellsY) { + tip("Height grid is not available", false, "error"); + return; + } + + const ncols = grid.cellsX; + const nrows = grid.cellsY; + const metersPerPixel = getMetersPerPixel(); + const cellsize = (graphWidth / ncols) * metersPerPixel; // meters per grid cell + + // Lower-left origin in world meters matches other exports + const xllcorner = 0; + const yllcorner = -(graphHeight * metersPerPixel); + const NODATA = -9999; + + // Convert FMG height (0..100, 20 sea level) to meters (signed) + const exp = +heightExponentInput.value; + function elevationInMeters(h) { + if (h >= 20) return Math.pow(h - 18, exp); // above sea level + if (h > 0) return ((h - 20) / h) * 50; // below sea level (negative) + return 0; // treat 0 as 0 + } + + let lines = []; + lines.push(`ncols ${ncols}`); + lines.push(`nrows ${nrows}`); + lines.push(`xllcorner ${xllcorner}`); + lines.push(`yllcorner ${yllcorner}`); + lines.push(`cellsize ${cellsize}`); + lines.push(`NODATA_value ${NODATA}`); + + // ESRI ASCII expects rows from top (north) to bottom (south) + for (let row = 0; row < nrows; row++) { + const vals = new Array(ncols); + for (let col = 0; col < ncols; col++) { + const i = col + row * ncols; + const h = grid.cells.h[i]; + const z = elevationInMeters(h); + vals[col] = Number.isFinite(z) ? rn(z, 2) : NODATA; + } + lines.push(vals.join(" ")); + } + + const content = lines.join("\n"); + const fileName = getFileName("Heightmap") + ".asc"; + downloadFile(content, fileName, "text/plain"); +} + +// Helpers to build MultiPolygons from cell sets +function getCellPolygonCoordinates(cellVertices) { + const {vertices} = pack; + const coordinates = cellVertices.map(vertex => { + const [x, y] = vertices.p[vertex]; + return getFantasyCoordinates(x, y, 2); + }); + // Close the ring + return [[...coordinates, coordinates[0]]]; +} + +function buildMultiPolygonFromCells(cellIds) { + const {cells} = pack; + const polygons = cellIds.map(i => getCellPolygonCoordinates(cells.v[i])); + // polygons is an array of [ [ ring ] ] — wrap for MultiPolygon + return polygons; +} + +function aggregatePopulationByCells(cellIds) { + // Follow editor logic: population lives in burgs; rural is accounted for via small burgs only + // Return values in absolute people, matching CSV exports + let ruralK = 0; // thousands-equivalent for rural (as tracked in states) + let urbanK = 0; // thousands for urban from burgs + for (const i of cellIds) { + const burgId = pack.cells.burg[i]; + if (!burgId) continue; + const k = pack.burgs[burgId].population; // in thousands + // Mirror states stats split: <= 0.1k as rural, otherwise urban + if (k > 0.1) urbanK += k; else ruralK += k; + } + const rural = Math.round(ruralK * populationRate); + const urban = Math.round(urbanK * 1000 * urbanization); + return {rural, urban, total: rural + urban}; +} + +function sumAreaByCells(cellIds) { + const sum = cellIds.reduce((acc, i) => acc + (pack.cells.area[i] || 0), 0); + return getArea(sum); +} + +function getCellsFor(type, id) { + const {cells} = pack; + switch (type) { + case "state": + return cells.i.filter(i => cells.h[i] >= 20 && cells.state[i] === id); + case "province": + return cells.i.filter(i => cells.h[i] >= 20 && cells.province[i] === id); + case "culture": + return cells.i.filter(i => cells.h[i] >= 20 && cells.culture[i] === id); + case "religion": + return cells.i.filter(i => cells.h[i] >= 20 && cells.religion[i] === id); + default: + return []; + } +} + +function buildGeoJsonCultures() { + const metersPerPixel = getMetersPerPixel(); + const features = pack.cultures + .filter(c => c.i && !c.removed) + .map(c => { + const cellIds = getCellsFor("culture", c.i); + if (!cellIds.length) return null; + const geometry = {type: "MultiPolygon", coordinates: buildMultiPolygonFromCells(cellIds)}; + const {total} = aggregatePopulationByCells(cellIds); + const area = sumAreaByCells(cellIds); + const namesbase = nameBases[c.base]?.name; + const origins = (c.origins || []).filter(o => o).map(o => pack.cultures[o]?.name).filter(Boolean); + const properties = { + id: c.i, + name: c.name, + color: c.color, + cells: cellIds.length, + expansionism: c.expansionism, + type: c.type, + area, + population: rn(total), + namesbase: namesbase || "", + emblemsShape: c.emblemsShape || "", + origins + }; + return {type: "Feature", geometry, properties}; + }) + .filter(Boolean); + + const json = { + type: "FeatureCollection", + features, + metadata: { + crs: "Fantasy Map Cartesian (meters)", + mapName: mapName.value, + scale: { + distance: distanceScale, + unit: distanceUnitInput.value, + meters_per_pixel: metersPerPixel + } + } + }; + return json; +} + +function saveGeoJsonCultures() { + const json = buildGeoJsonCultures(); + const fileName = getFileName("Cultures") + ".geojson"; + downloadFile(JSON.stringify(json), fileName, "application/json"); +} + +function buildGeoJsonReligions() { + const metersPerPixel = getMetersPerPixel(); + const features = pack.religions + .filter(r => r.i && !r.removed) + .map(r => { + const cellIds = getCellsFor("religion", r.i); + if (!cellIds.length) return null; + const geometry = {type: "MultiPolygon", coordinates: buildMultiPolygonFromCells(cellIds)}; + const {total} = aggregatePopulationByCells(cellIds); + const area = sumAreaByCells(cellIds); + const origins = (r.origins || []).filter(o => o).map(o => pack.religions[o]?.name).filter(Boolean); + const properties = { + id: r.i, + name: r.name, + color: r.color, + type: r.type, + form: r.form, + deity: r.deity || "", + area, + believers: rn(total), + origins, + potential: r.expansion, + expansionism: r.expansionism + }; + return {type: "Feature", geometry, properties}; + }) + .filter(Boolean); + + const json = { + type: "FeatureCollection", + features, + metadata: { + crs: "Fantasy Map Cartesian (meters)", + mapName: mapName.value, + scale: { + distance: distanceScale, + unit: distanceUnitInput.value, + meters_per_pixel: metersPerPixel + } + } + }; + return json; +} + +function saveGeoJsonReligions() { + const json = buildGeoJsonReligions(); + const fileName = getFileName("Religions") + ".geojson"; + downloadFile(JSON.stringify(json), fileName, "application/json"); +} + +function buildGeoJsonStates() { + const metersPerPixel = getMetersPerPixel(); + const features = pack.states + .filter(s => s.i && !s.removed) + .map(s => { + const cellIds = getCellsFor("state", s.i); + if (!cellIds.length) return null; + const geometry = {type: "MultiPolygon", coordinates: buildMultiPolygonFromCells(cellIds)}; + const {rural, urban, total} = aggregatePopulationByCells(cellIds); + const area = sumAreaByCells(cellIds); + const properties = { + id: s.i, + name: s.name, + fullName: s.fullName || "", + form: s.form || "", + color: s.color, + capital: s.capital || 0, + culture: s.culture, + type: s.type, + expansionism: s.expansionism, + cells: cellIds.length, + burgs: s.burgs || 0, + area, + totalPopulation: total, + ruralPopulation: rural, + urbanPopulation: urban + }; + return {type: "Feature", geometry, properties}; + }) + .filter(Boolean); + + const json = { + type: "FeatureCollection", + features, + metadata: { + crs: "Fantasy Map Cartesian (meters)", + mapName: mapName.value, + scale: { + distance: distanceScale, + unit: distanceUnitInput.value, + meters_per_pixel: metersPerPixel + } + } + }; + return json; +} + +function saveGeoJsonStates() { + const json = buildGeoJsonStates(); + const fileName = getFileName("States") + ".geojson"; + downloadFile(JSON.stringify(json), fileName, "application/json"); +} + +function buildGeoJsonProvinces() { + const metersPerPixel = getMetersPerPixel(); + const features = pack.provinces + .filter(p => p.i && !p.removed) + .map(p => { + const cellIds = getCellsFor("province", p.i); + if (!cellIds.length) return null; + const geometry = {type: "MultiPolygon", coordinates: buildMultiPolygonFromCells(cellIds)}; + const {rural, urban, total} = aggregatePopulationByCells(cellIds); + const area = sumAreaByCells(cellIds); + const properties = { + id: p.i, + name: p.name, + fullName: p.fullName || "", + form: p.form || "", + state: p.state, + color: p.color, + capital: p.burg || 0, + area, + totalPopulation: total, + ruralPopulation: rural, + urbanPopulation: urban, + burgs: (p.burgs && p.burgs.length) || 0 + }; + return {type: "Feature", geometry, properties}; + }) + .filter(Boolean); + + const json = { + type: "FeatureCollection", + features, + metadata: { + crs: "Fantasy Map Cartesian (meters)", + mapName: mapName.value, + scale: { + distance: distanceScale, + unit: distanceUnitInput.value, + meters_per_pixel: metersPerPixel + } + } + }; + return json; +} + +function saveGeoJsonProvinces() { + const json = buildGeoJsonProvinces(); + const fileName = getFileName("Provinces") + ".geojson"; + downloadFile(JSON.stringify(json), fileName, "application/json"); +} + +function buildGeoJsonZones() { + const metersPerPixel = getMetersPerPixel(); + const features = (pack.zones || []) + .map(z => { + if (!z || z.hidden) return null; + const cellIds = (z.cells || []).filter(i => pack.cells.h[i] >= 20); + if (!cellIds.length) return null; + const geometry = {type: "MultiPolygon", coordinates: buildMultiPolygonFromCells(cellIds)}; + const {total} = aggregatePopulationByCells(cellIds); + const area = sumAreaByCells(cellIds); + const properties = { + id: z.i, + color: z.color, + description: z.name, + type: z.type, + cells: cellIds.length, + area, + population: rn(total) + }; + return {type: "Feature", geometry, properties}; + }) + .filter(Boolean); + + const json = { + type: "FeatureCollection", + features, + metadata: { + crs: "Fantasy Map Cartesian (meters)", + mapName: mapName.value, + scale: { + distance: distanceScale, + unit: distanceUnitInput.value, + meters_per_pixel: metersPerPixel + } + } + }; + return json; +} + +function saveGeoJsonZones() { + const json = buildGeoJsonZones(); + const fileName = getFileName("Zones") + ".geojson"; + downloadFile(JSON.stringify(json), fileName, "application/json"); +} + +// Convenience: export all GeoJSONs into a single ZIP +async function saveAllGeoJson() { + await import("../../libs/jszip.min.js"); + const zip = new window.JSZip(); + + const files = [ + {name: getFileName("Cells") + ".geojson", json: buildGeoJsonCells()}, + {name: getFileName("Routes") + ".geojson", json: buildGeoJsonRoutes()}, + {name: getFileName("Rivers") + ".geojson", json: buildGeoJsonRivers()}, + {name: getFileName("Markers") + ".geojson", json: buildGeoJsonMarkers()}, + {name: getFileName("Burgs") + ".geojson", json: buildGeoJsonBurgs()}, + {name: getFileName("Regiments") + ".geojson", json: buildGeoJsonRegiments()}, + {name: getFileName("States") + ".geojson", json: buildGeoJsonStates()}, + {name: getFileName("Provinces") + ".geojson", json: buildGeoJsonProvinces()}, + {name: getFileName("Cultures") + ".geojson", json: buildGeoJsonCultures()}, + {name: getFileName("Religions") + ".geojson", json: buildGeoJsonReligions()}, + {name: getFileName("Zones") + ".geojson", json: buildGeoJsonZones()} + ]; + + for (const f of files) { + try { + zip.file(f.name, JSON.stringify(f.json)); + } catch (e) { + console.error("Failed to add", f.name, e); + } + } + + const blob = await zip.generateAsync({type: "blob"}); + const link = document.createElement("a"); + link.href = URL.createObjectURL(blob); + link.download = getFileName("GeoJSON") + ".zip"; + link.click(); + setTimeout(() => URL.revokeObjectURL(link.href), 5000); +} diff --git a/qgis/README.md b/qgis/README.md new file mode 100644 index 00000000..f7a7b75c --- /dev/null +++ b/qgis/README.md @@ -0,0 +1,39 @@ +# QGIS Styles for Fantasy Map GeoJSON + +This folder contains ready-to-use QGIS (.qml) styles that match the Fantasy Map Generator exports. + +How to use +- Import each GeoJSON into QGIS. +- Right‑click the layer → Properties → Symbology → Style → Load Style… → pick the matching .qml from `qgis/styles`. +- Set layer CRS to the custom Fantasy Map Cartesian CRS: + +``` +ENGCRS["Fantasy Map Cartesian (meters)", + EDATUM["Fantasy Map Datum"], + CS[Cartesian,2], + AXIS["easting (X)",east, + ORDER[1], + LENGTHUNIT["metre",1]], + AXIS["northing (Y)",north, + ORDER[2], + LENGTHUNIT["metre",1]]] +``` + +Included styles +- cells.qml: Graduated fill by `height` (water → mountains). +- rivers.qml: Blue lines, width driven by `width` attribute. +- routes.qml: Rule-based by `type`/`group` (sea routes dashed blue; roads brown; trails dashed, etc.). +- markers.qml: Simple point symbols, categorized by `type` where present. +- burgs.qml: Rule-based (capitals, ports, fortified, towns). +- regiments.qml: Square markers with label = `totalUnits`. +- states.qml: Polygon fill color from `color` attribute, labeled with `name`. +- provinces.qml: Polygon fill color from `color`, labeled with `name`. +- cultures.qml: Polygon fill color from `color`, labeled with `name`. +- religions.qml: Polygon fill color from `color`, labeled with `name`. +- zones.qml: Polygon fill color from `color`, labeled with `description`. + +Notes +- Color fields for polygons use data-defined overrides; make sure your exported GeoJSON includes a `color` property (added by the new exporters). +- You can tweak line widths and colors per project scale. +- For cells, you can switch to a categorized style by `biome` if you prefer; this style uses elevation for a generic land scheme. + - For `markers.qml` font icons: ensure an emoji-capable font is installed and available to QGIS (e.g., `Noto Color Emoji` on Linux, `Segoe UI Emoji` on Windows, `Apple Color Emoji` on macOS). The style binds the Font Marker’s character directly to the `icon` attribute; the `icon` field should contain the desired glyph (e.g., 🏰, ⛏️). Some QGIS/Qt builds may render emoji as monochrome. diff --git a/qgis/styles/burgs.qml b/qgis/styles/burgs.qml new file mode 100644 index 00000000..b880022f --- /dev/null +++ b/qgis/styles/burgs.qml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/cells.qml b/qgis/styles/cells.qml new file mode 100644 index 00000000..9a8221bb --- /dev/null +++ b/qgis/styles/cells.qml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/cultures.qml b/qgis/styles/cultures.qml new file mode 100644 index 00000000..bf8be1d4 --- /dev/null +++ b/qgis/styles/cultures.qml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/markers.qml b/qgis/styles/markers.qml new file mode 100644 index 00000000..99a2e0f3 --- /dev/null +++ b/qgis/styles/markers.qml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/provinces.qml b/qgis/styles/provinces.qml new file mode 100644 index 00000000..764c3a6c --- /dev/null +++ b/qgis/styles/provinces.qml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/regiments.qml b/qgis/styles/regiments.qml new file mode 100644 index 00000000..b0368d38 --- /dev/null +++ b/qgis/styles/regiments.qml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/religions.qml b/qgis/styles/religions.qml new file mode 100644 index 00000000..9ea08a39 --- /dev/null +++ b/qgis/styles/religions.qml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/rivers.qml b/qgis/styles/rivers.qml new file mode 100644 index 00000000..1f4c33bd --- /dev/null +++ b/qgis/styles/rivers.qml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/routes.qml b/qgis/styles/routes.qml new file mode 100644 index 00000000..63361b9d --- /dev/null +++ b/qgis/styles/routes.qml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/states.qml b/qgis/styles/states.qml new file mode 100644 index 00000000..60523b03 --- /dev/null +++ b/qgis/styles/states.qml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/qgis/styles/zones.qml b/qgis/styles/zones.qml new file mode 100644 index 00000000..19ad68cf --- /dev/null +++ b/qgis/styles/zones.qml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/run_python_server.bat b/run_python_server.bat index b74d34c1..662d537d 100644 --- a/run_python_server.bat +++ b/run_python_server.bat @@ -1,3 +1,3 @@ -start chrome.exe http://localhost:8000/ +start chrome.exe http://localhost:9000/ @echo off -python -m http.server 8000 \ No newline at end of file +python -m http.server 9000 \ No newline at end of file