Merge main into bundler-2/work
This commit is contained in:
commit
38d5a2a239
12 changed files with 1721 additions and 65 deletions
670
data/tables/gospel-by-province.json
Normal file
670
data/tables/gospel-by-province.json
Normal file
|
|
@ -0,0 +1,670 @@
|
|||
{
|
||||
"meta": {
|
||||
"title": "Gospel access by province — India and China",
|
||||
"why": "These two countries hold 47.9% of Doxa's roster (855 + 154 of 2,107). No other country is close; the third is Sudan at 105. A national fill cannot answer \"where would a team go\" for half the map.",
|
||||
"generated": "2026-09-26",
|
||||
"provinces_with_groups": 44,
|
||||
"provinces_available": 46,
|
||||
"groups_assigned": 998,
|
||||
"groups_unassigned": 11,
|
||||
"china_note": "China's ADM1 file carries 12 provinces, not 31+. Measured rather than assumed: 152 of 154 Chinese groups fall inside them and all twelve are used, so the file is cut to the provinces where the unreached peoples are.",
|
||||
"ways_in_are_country_level": "The ways in are chosen for the COUNTRY, and going below the border is what exposes the cost of that. Arunachal Pradesh, in the far north-east, is offered TELUGU — a South Indian language — because the curated bridge table names it for those groups and a curated bridge outranks the computed one. India's computed default is Hindi (41%, official), which is defensible nationally and still wrong for much of the north-east. This table does not fix that: it makes it visible. Until a bridge can be chosen per province, read the ways-in column as \"a language with Scripture and film somewhere in this country\", not as a recommendation for this place.",
|
||||
"approximate": "A province is assigned by point-in-polygon on the group's coordinate, and that coordinate marks where a PEOPLE is found, not a settlement — 108 groups across the roster even share a coordinate with another group. Near a border the point can fall on the wrong side. Every row is flagged approximate and the unassigned are counted, never dropped. No surface may present a province as a fact about a group."
|
||||
},
|
||||
"columns": [
|
||||
{
|
||||
"title": "Country",
|
||||
"field": "country",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "Province",
|
||||
"field": "province",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "People groups",
|
||||
"field": "groups",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "People",
|
||||
"field": "people",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "Groups with nothing",
|
||||
"field": "zero_access_groups",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "People with nothing",
|
||||
"field": "zero_access_people",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "Largest with nothing",
|
||||
"field": "zero_access_examples",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "Ways in",
|
||||
"field": "ways_in",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "Placement approximate",
|
||||
"field": "approximate",
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"rows": [
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Yunnan Province",
|
||||
"groups": 61,
|
||||
"people": 3524875,
|
||||
"zero_access_groups": 14,
|
||||
"zero_access_people": 602850,
|
||||
"zero_access_examples": "Hongjin Tai; Wenma Zhuang; Mosuo",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Guizhou Province",
|
||||
"groups": 34,
|
||||
"people": 3302000,
|
||||
"zero_access_groups": 7,
|
||||
"zero_access_people": 488900,
|
||||
"zero_access_examples": "Huishui Miao; Yanghuang; Cai",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Sichuan Province",
|
||||
"groups": 12,
|
||||
"people": 1621700,
|
||||
"zero_access_groups": 7,
|
||||
"zero_access_people": 105700,
|
||||
"zero_access_examples": "Ersu; Minyak; Namuyi",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Andaman and Nicobar Islands",
|
||||
"groups": 7,
|
||||
"people": 81900,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 500,
|
||||
"zero_access_examples": "Jarawas; Onge",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Arunāchal Pradesh",
|
||||
"groups": 7,
|
||||
"people": 13550,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 600,
|
||||
"zero_access_examples": "Khamba; Na",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Xinjiang Uyghur Autonomous Region",
|
||||
"groups": 7,
|
||||
"people": 284125,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 31500,
|
||||
"zero_access_examples": "Sarikoli Tajiks; Ainu",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Hunan Province",
|
||||
"groups": 5,
|
||||
"people": 2405000,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 150000,
|
||||
"zero_access_examples": "Eastern Xiangxi Miao; Wunai",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Qinghai Province",
|
||||
"groups": 3,
|
||||
"people": 55700,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 12700,
|
||||
"zero_access_examples": "Tongren Bonan; Wutun",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Kerala",
|
||||
"groups": 72,
|
||||
"people": 2804375,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 8600,
|
||||
"zero_access_examples": "Malai Pandaram",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Jhārkhand",
|
||||
"groups": 9,
|
||||
"people": 957400,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 5000,
|
||||
"zero_access_examples": "Jadupetia",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Guangxi Zhuang Autonomous Region",
|
||||
"groups": 6,
|
||||
"people": 121150,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 750,
|
||||
"zero_access_examples": "Yerong",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Manipur",
|
||||
"groups": 5,
|
||||
"people": 321400,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 1700,
|
||||
"zero_access_examples": "Koiren",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Inner Mongolia Autonomous Region",
|
||||
"groups": 3,
|
||||
"people": 206900,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 170000,
|
||||
"zero_access_examples": "Buryat",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Gujarāt",
|
||||
"groups": 90,
|
||||
"people": 3164770,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Andhra Pradesh",
|
||||
"groups": 81,
|
||||
"people": 4858130,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Karnātaka",
|
||||
"groups": 81,
|
||||
"people": 4610175,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Tamil Nādu",
|
||||
"groups": 64,
|
||||
"people": 2760850,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Odisha",
|
||||
"groups": 64,
|
||||
"people": 1304500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Mahārāshtra",
|
||||
"groups": 53,
|
||||
"people": 2858050,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Rājasthān",
|
||||
"groups": 48,
|
||||
"people": 1731500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Madhya Pradesh",
|
||||
"groups": 33,
|
||||
"people": 2922600,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Jammu and Kashmīr",
|
||||
"groups": 33,
|
||||
"people": 520515,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "West Bengal",
|
||||
"groups": 30,
|
||||
"people": 2211000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Telangāna",
|
||||
"groups": 26,
|
||||
"people": 1665800,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Chhattīsgarh",
|
||||
"groups": 24,
|
||||
"people": 1916750,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Uttar Pradesh",
|
||||
"groups": 23,
|
||||
"people": 836550,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Himāchal Pradesh",
|
||||
"groups": 20,
|
||||
"people": 114970,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Bihār",
|
||||
"groups": 18,
|
||||
"people": 430100,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Assam",
|
||||
"groups": 15,
|
||||
"people": 2377400,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Tibet Autonomous Region",
|
||||
"groups": 13,
|
||||
"people": 208750,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Tripura",
|
||||
"groups": 11,
|
||||
"people": 698500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Uttarākhand",
|
||||
"groups": 7,
|
||||
"people": 111875,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Ladākh",
|
||||
"groups": 6,
|
||||
"people": 183000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Goa",
|
||||
"groups": 5,
|
||||
"people": 337600,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Haryāna",
|
||||
"groups": 4,
|
||||
"people": 69500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Punjab",
|
||||
"groups": 4,
|
||||
"people": 10100,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Gansu Province",
|
||||
"groups": 3,
|
||||
"people": 21400,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Hainan Province",
|
||||
"groups": 3,
|
||||
"people": 1096500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Meghālaya",
|
||||
"groups": 2,
|
||||
"people": 17150,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Heilongjiang Province",
|
||||
"groups": 2,
|
||||
"people": 5000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Delhi",
|
||||
"groups": 1,
|
||||
"people": 1200,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Chandīgarh",
|
||||
"groups": 1,
|
||||
"people": 34000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Puducherry",
|
||||
"groups": 1,
|
||||
"people": 20500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Sikkim",
|
||||
"groups": 1,
|
||||
"people": 7400,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
}
|
||||
],
|
||||
"unassigned": [
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Bharwad",
|
||||
"lat": 20.322175,
|
||||
"lng": 72.968458
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Great Andamanese",
|
||||
"lat": 12.211728,
|
||||
"lng": 92.833491
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Indo-French",
|
||||
"lat": 11.930182,
|
||||
"lng": 79.797144
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Indo-Vietnamese",
|
||||
"lat": 11.912456,
|
||||
"lng": 79.815389
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Laccadive",
|
||||
"lat": 10.0675,
|
||||
"lng": 73.6422
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Sagharias",
|
||||
"lat": 20.71815,
|
||||
"lng": 70.988939
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Sentinelese",
|
||||
"lat": 11.557662,
|
||||
"lng": 92.267154
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Vettalaikarans",
|
||||
"lat": 11.916308,
|
||||
"lng": 79.807019
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Vettiyan",
|
||||
"lat": 11.91386,
|
||||
"lng": 79.814472
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"people_group": "Jing",
|
||||
"lat": 21.577774,
|
||||
"lng": 108.126828
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"people_group": "Pana",
|
||||
"lat": 21.246492,
|
||||
"lng": 101.27182
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -183,12 +183,36 @@ const activeBands = computed(() => (mode.value === 'gap' ? BANDS : COVER_BANDS))
|
|||
// COUNT of Doxa groups in a country, a pin is what ONE group HAS. Indexing a count ramp by
|
||||
// a tier would have painted "nothing found" in the colour of "1-4 groups" — two different
|
||||
// facts wearing one colour, which is the disagreement that comment was written to prevent.
|
||||
// Dark green reads as complete, sage as partial, oxblood as empty; all three sit apart from
|
||||
// the clay country ramp in hue and in lightness, so a pin never dissolves into its country.
|
||||
/**
|
||||
* ═══ THE GAP IS A HOLE IN THE MAP ════════════════════════════════════════════════════════
|
||||
*
|
||||
* The claim above — "all three sit apart from the clay ramp" — was false for the one that
|
||||
* matters. Tier 0 was #7d3b30 and the darkest country fill is #7d3b30: THE SAME COLOUR. So in
|
||||
* exactly the countries with 40+ groups having nothing, the pins that matter most dissolved
|
||||
* into their own country. Reported by the Driver; confirmed by reading the two tables.
|
||||
*
|
||||
* Hue alone cannot fix this, because a choropleth and its pins compete for the same range at
|
||||
* every zoom. So the states differ in FORM, which survives any background:
|
||||
*
|
||||
* nothing found a HOLE — white centre, thick oxblood rim. Reads as absence, and carries
|
||||
* both a light and a dark component, so it separates on pale fills and on
|
||||
* the darkest one. Largest, and drawn on top.
|
||||
* some resource a solid sage dot
|
||||
* Scripture+film a small solid dark dot, quiet, receding
|
||||
*
|
||||
* A white under-halo sits beneath every pin as well, so a dot never touches its fill directly.
|
||||
* Size carries urgency, form carries state, colour agrees with both: at a glance the map reads
|
||||
* as holes where the gospel is not, and the eye goes to them first.
|
||||
*/
|
||||
const PIN_COLOR = {
|
||||
2: '#3b463d', // Scripture AND film in their own language
|
||||
1: '#92b195', // one of the two
|
||||
0: '#7d3b30', // nothing found in the pools checked — the pin that matters most
|
||||
0: '#ffffff', // nothing found — a WHITE CORE, rimmed oxblood by the stroke below
|
||||
}
|
||||
const PIN_RIM = {
|
||||
2: '#ffffff',
|
||||
1: '#ffffff',
|
||||
0: '#7d3b30', // the rim carries the alarm; the hole carries the meaning
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -283,12 +307,19 @@ function setPinFilter(v) {
|
|||
pinFilter.value = v
|
||||
const m = mapRef.value
|
||||
if (!m || !m.getLayer('gr-pins')) return
|
||||
m.setFilter('gr-pins',
|
||||
/* Both layers, always. A halo left behind by a filtered-out pin is a ghost dot, and the
|
||||
reader has no way to tell it from a real one. */
|
||||
/* ONE expression, applied to both layers. Written twice, the halo and the pin would drift
|
||||
and a filtered-out pin would leave its halo behind as a ghost dot the reader cannot tell
|
||||
from a real one. */
|
||||
const expr =
|
||||
v === 'all' ? null
|
||||
: v === 'none' ? ['==', ['get', 'tier'], 0]
|
||||
: v === 'some' ? ['==', ['get', 'tier'], 1]
|
||||
: v === 'hnr' ? ['==', ['get', 'hnr'], true]
|
||||
: ['==', ['get', 'tier'], 2])
|
||||
: ['==', ['get', 'tier'], 2]
|
||||
if (m.getLayer('gr-pins-halo')) m.setFilter('gr-pins-halo', expr)
|
||||
m.setFilter('gr-pins', expr)
|
||||
}
|
||||
|
||||
// THE RANKED GAP. "Where is the gap" is answered by the filter; "which gap is biggest"
|
||||
|
|
@ -733,6 +764,7 @@ function groupAt(i) {
|
|||
population: r[5],
|
||||
countries: byIso.value[r[3]]?.country || r[3],
|
||||
_iso3: r[3] || '',
|
||||
lat: r[1], lng: r[2],
|
||||
scripture_url: c.s || '',
|
||||
film_url: c.f || '',
|
||||
/* Empty except where the JESUS component does not carry this language and another
|
||||
|
|
@ -811,6 +843,37 @@ const withoutResources = computed(() => groupsForCountry.value.filter((r) => !ha
|
|||
* Third time this exact flag has under-reported: the pins builder and the access builder were
|
||||
* both corrected the same way. Same three signals here, so the four surfaces agree.
|
||||
*/
|
||||
/**
|
||||
* ═══ WHAT A DOT IS, AND WHAT IT IS NOT ════════════════════════════════════════════════════
|
||||
*
|
||||
* A pin is a locality marker for a PEOPLE, not the location of a settlement, and the data says
|
||||
* so if you look at it. MEASURED over the 2,107 placed groups: 2,048 distinct coordinates, so
|
||||
* 49 coordinates carry more than one group and 108 groups sit on a point they share with
|
||||
* another — 41 pairs, 6 triples and 2 quadruples. Four groups share 12.843781, 75.247906 in
|
||||
* coastal Karnataka; four more share a second point a few kilometres away.
|
||||
*
|
||||
* The coordinates also carry FALSE PRECISION: 1,274 of them are given to six decimal places,
|
||||
* which is metre resolution on a figure that describes where a people is found. Rendering that
|
||||
* without comment invites a reader to treat a dot as an address.
|
||||
*
|
||||
* So the sheet says what the dot is, and where a point is shared it says how many share it.
|
||||
* "Approximate" alone is not the honest word — it hides that some dots are literally the same
|
||||
* dot, which is the part a reader would otherwise never discover.
|
||||
*/
|
||||
const sharedPoints = computed(() => {
|
||||
const at = {}
|
||||
for (const r of pinRows.value) {
|
||||
const k = `${r[1]},${r[2]}`
|
||||
;(at[k] = at[k] || []).push(r[0])
|
||||
}
|
||||
return at
|
||||
})
|
||||
const sharedWith = (g) => {
|
||||
if (!g || g.lat == null || g.lng == null) return []
|
||||
const names = sharedPoints.value[`${g.lat},${g.lng}`] || []
|
||||
return names.filter((n) => n !== g.people_group)
|
||||
}
|
||||
|
||||
const isDeafGroup = (code, name) => {
|
||||
const c = pinCodes.value[code]
|
||||
return (c && c.sg === 1) || /sign language/i.test((c && c.l) || '') || /\bDeaf\b/i.test(name || '')
|
||||
|
|
@ -1039,7 +1102,7 @@ function pinFC() {
|
|||
type: 'Feature',
|
||||
// hnr is baked so the filter stays a GL-side predicate like the others: recomputing it
|
||||
// per toggle would re-upload 12,379 features to answer a yes/no already known here.
|
||||
properties: { i, tier: p[6], color: PIN_COLOR[p[6]], hnr: hnrFor(p[4]) },
|
||||
properties: { i, tier: p[6], color: PIN_COLOR[p[6]], rim: PIN_RIM[p[6]], hnr: hnrFor(p[4]) },
|
||||
geometry: { type: 'Point', coordinates: [p[2], p[1]] },
|
||||
}
|
||||
}
|
||||
|
|
@ -1073,6 +1136,23 @@ function paintPins(map) {
|
|||
if (!pinRows.value.length) return
|
||||
if (map.getSource('gr-pin-src')) { map.getSource('gr-pin-src').setData(pinFC()); return }
|
||||
map.addSource('gr-pin-src', { type: 'geojson', data: pinFC() })
|
||||
/* A neutral halo UNDER every pin, so a dot never touches its fill directly. This is what
|
||||
makes the encoding survive a choropleth that shares its colour range — form and hue both
|
||||
fail on a near-match, a gap of background does not. Separate layer, because a circle has
|
||||
one stroke and the pin above needs its own for the rim. */
|
||||
map.addLayer({
|
||||
id: 'gr-pins-halo', type: 'circle', source: 'gr-pin-src',
|
||||
paint: {
|
||||
'circle-color': 'rgba(255,255,255,0.85)',
|
||||
'circle-radius': ['interpolate', ['linear'], ['zoom'],
|
||||
0, ['match', ['get', 'tier'], 0, 4.0, 2.7],
|
||||
4, ['match', ['get', 'tier'], 0, 6.0, 4.0],
|
||||
8, ['match', ['get', 'tier'], 0, 9.4, 6.6],
|
||||
12, ['match', ['get', 'tier'], 0, 13, 9.4]],
|
||||
'circle-blur': 0.35,
|
||||
'circle-opacity': 0.55,
|
||||
},
|
||||
})
|
||||
map.addLayer({
|
||||
id: 'gr-pins', type: 'circle', source: 'gr-pin-src',
|
||||
// circle-sort-key is a LAYOUT property. Mapbox tolerates it in `paint`; MapLibre
|
||||
|
|
@ -1088,11 +1168,21 @@ function paintPins(map) {
|
|||
},
|
||||
paint: {
|
||||
'circle-color': ['get', 'color'],
|
||||
'circle-stroke-color': '#ffffff',
|
||||
'circle-stroke-width': ['interpolate', ['linear'], ['zoom'], 0, 0.4, 6, 0.8, 12, 1.1],
|
||||
'circle-stroke-opacity': 0.85,
|
||||
'circle-radius': ['interpolate', ['linear'], ['zoom'], 0, 1.8, 4, 3, 8, 5.5, 12, 8],
|
||||
'circle-opacity': 0.92,
|
||||
'circle-stroke-color': ['get', 'rim'],
|
||||
// The hole needs a rim thick enough to be a rim and not an outline: at world zoom a
|
||||
// 0.4px stroke on a 1.8px dot is invisible, which is how the old one disappeared.
|
||||
'circle-stroke-width': ['interpolate', ['linear'], ['zoom'],
|
||||
0, ['match', ['get', 'tier'], 0, 1.1, 0.5],
|
||||
6, ['match', ['get', 'tier'], 0, 1.8, 0.9],
|
||||
12, ['match', ['get', 'tier'], 0, 2.6, 1.2]],
|
||||
'circle-stroke-opacity': 1,
|
||||
// Size is urgency. A group with nothing is the largest dot on the map at every zoom.
|
||||
'circle-radius': ['interpolate', ['linear'], ['zoom'],
|
||||
0, ['match', ['get', 'tier'], 0, 2.6, 1.6],
|
||||
4, ['match', ['get', 'tier'], 0, 4.2, 2.6],
|
||||
8, ['match', ['get', 'tier'], 0, 7, 4.8],
|
||||
12, ['match', ['get', 'tier'], 0, 10, 7]],
|
||||
'circle-opacity': 1,
|
||||
},
|
||||
})
|
||||
// TAP, not hover — same reason as the choropleth: hover never fires on a phone.
|
||||
|
|
@ -1414,7 +1504,15 @@ useShadowStyles(
|
|||
// again — a geometric guarantee, not a tuned z-index.
|
||||
// KEEP THIS BYTE-IDENTICAL to cities-internet/connectivity-map.vue: they are
|
||||
// clones and the whole point of fixing them together is that they not diverge.
|
||||
/* ═══ THE LEGEND MUST NEVER RUN OFF THE MAP ═══════════════════════════════════════════
|
||||
Reported by the Driver: it overlapped the bottom of the page. It is absolutely
|
||||
positioned inside the map, so its height was whatever its content happened to be — on a
|
||||
short viewport that is taller than the map itself, and the overflow simply escaped.
|
||||
Capped to the map's own height and scrolled inside. The cap is the CONTAINER's height,
|
||||
not the viewport's, because this leaf is embedded and the two are not the same thing —
|
||||
using vh here would break on every partner page that gives the map a fixed box. */
|
||||
'.gm-legend{position:absolute;top:8px;left:8px;width:var(--map-legend-width,380px);' +
|
||||
'max-height:calc(100% - 16px);overflow-y:auto;overscroll-behavior:contain;' +
|
||||
'max-width:calc(100% - 16px);box-sizing:border-box;z-index:4;padding:8px 10px;' +
|
||||
'border-radius:10px;background:rgba(255,255,255,.94);color:#0f1419;' +
|
||||
"font:12px/1.35 -apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;box-shadow:0 2px 10px rgba(0,0,0,.16)}" +
|
||||
|
|
@ -1445,6 +1543,13 @@ useShadowStyles(
|
|||
'padding:3px 8px;border-radius:6px;cursor:pointer;margin-left:4px;min-height:24px}' +
|
||||
'.gm-pinkey-h{font-size:14px;font-weight:600;margin-bottom:4px}' +
|
||||
'.gm-caveat{margin-top:5px;font-size:13.5px;opacity:.72;line-height:1.4}' +
|
||||
'.gm-dot-hole{border:2.5px solid #7d3b30;box-sizing:border-box}' +
|
||||
'.gm-why{margin-top:6px}' +
|
||||
'.gm-why-sum{cursor:pointer;font-weight:600;opacity:.9;list-style:none;padding:2px 0}' +
|
||||
'.gm-why-sum::-webkit-details-marker{display:none}' +
|
||||
'.gm-why-sum::before{content:"\\25B8 "}' +
|
||||
'details[open]>.gm-why-sum::before{content:"\\25BE "}' +
|
||||
'.gm-why-body{margin-top:4px;opacity:.9}' +
|
||||
/* Quiet enough that the gap itself still reads first: the row is about what is MISSING, and
|
||||
the way in is the footnote to it, not the headline. */
|
||||
'.gm-pg-way{display:block;font-size:12.5px;color:#3b463d;opacity:.8;margin-top:2px}' +
|
||||
|
|
@ -1683,7 +1788,10 @@ useShadowStyles(
|
|||
<button type="button" class="gm-key gm-kbtn" :class="{ on: pinFilter === 'none' }"
|
||||
@click="setPinFilter(pinFilter === 'none' ? 'all' : 'none')"
|
||||
:aria-pressed="pinFilter === 'none'">
|
||||
<i class="gm-dot" :style="{ background: PIN_COLOR[0] }"></i>{{ t('gospel.legend.tier0') }}
|
||||
<!-- The swatch must BE the mark it explains. Tier 0 is a hole on the map — white
|
||||
core, oxblood rim — so a plain filled dot here would teach the wrong symbol,
|
||||
and a white one would vanish against this panel. -->
|
||||
<i class="gm-dot gm-dot-hole" :style="{ background: PIN_COLOR[0], borderColor: PIN_RIM[0] }"></i>{{ t('gospel.legend.tier0') }}
|
||||
<b>{{ fmt(pinTally.none) }}</b>
|
||||
</button>
|
||||
<!-- ═══ THE NUMBER BESIDE THE GAP IS THE ONE A MOBILISER CAME FOR ══════════════════
|
||||
|
|
@ -1735,23 +1843,28 @@ useShadowStyles(
|
|||
<div v-show="!narrow || legendOpen" v-if="!isEnglish" class="gm-caveat gm-prose-note">
|
||||
{{ t('gospel.prose.english') }}
|
||||
</div>
|
||||
<div v-show="!narrow || legendOpen" class="gm-caveat" dir="ltr">
|
||||
<!-- The colour and the dots are now computed from the SAME index. They used to be
|
||||
two datasets: the fill came from a curated set that had one group for Papua New
|
||||
Guinea while the map drew 831 pins there, so 135 of 170 countries were coloured
|
||||
by something the dots on top of them contradicted. -->
|
||||
<!-- The three SHORT instruction lines are translated; the long prose around them stays
|
||||
English by decision. They are what a reader needs to use the map at all — what a
|
||||
dot is, what "none found" does not mean, and that a country is tappable — so
|
||||
leaving them English made the map unusable rather than merely untranslated. -->
|
||||
<b>{{ t('gospel.guide.dotVsCountry') }}</b>
|
||||
<span dir="ltr"> A country is a COUNT of those groups — how many of
|
||||
<!-- ═══ BOTTOM LINE UP FRONT ═══════════════════════════════════════════════════════
|
||||
The three bold lines are the whole instruction set: what a dot is, what "none
|
||||
found" does not mean, and that a country is tappable. They are short, translated,
|
||||
and they are what a mobiliser opens this map for.
|
||||
Behind them sat 232 words of English prose — every word true and load-bearing, and
|
||||
none of it needed before you act. It was also half the reason the legend overflowed
|
||||
the page. Folded, not deleted: the basis is one click away, it stays English by the
|
||||
standing decision on prose, so folding costs nothing to translate and removes 232
|
||||
words from first sight. -->
|
||||
<div v-show="!narrow || legendOpen" class="gm-caveat" dir="ltr">
|
||||
<b>{{ t('gospel.guide.dotVsCountry') }}</b>
|
||||
<br><b>{{ t('gospel.guide.noneFoundShort') }}</b>
|
||||
<br><b>{{ t('gospel.guide.tapCountry') }}</b>
|
||||
<details class="gm-why">
|
||||
<summary class="gm-why-sum">How these numbers are made</summary>
|
||||
<div class="gm-why-body">
|
||||
<span dir="ltr"> A country is a COUNT of those groups — how many of
|
||||
Doxa's are there with nothing found — never a percentage: 106 of these 175 countries hold
|
||||
one or two groups, and a share over a denominator of two says nothing. A country Doxa does
|
||||
not work is left UNCOLOURED rather than drawn as covered, because this dataset has no
|
||||
finding about it either way.</span>
|
||||
<br><b>{{ t('gospel.guide.noneFoundShort') }}</b>
|
||||
<span dir="ltr">The pools checked are eBible, PNG.Bible, JESUS Film, Door43,
|
||||
<span dir="ltr">The pools checked are eBible, PNG.Bible, JESUS Film, Door43,
|
||||
Faith Comes By Hearing, Scripture Earth and Global Recordings Network). GRN is reached
|
||||
through their 5fish site, and that sweep is now <b>finished for every group in the gap</b>
|
||||
— every language with nothing else was asked for, at the ten-second crawl delay they
|
||||
|
|
@ -1762,8 +1875,9 @@ useShadowStyles(
|
|||
<template v-if="mode === 'coverage'">
|
||||
A “found” colour is equally bounded: it counts what these pools list, not everything that exists.
|
||||
</template></span>
|
||||
<br><b>{{ t('gospel.guide.tapCountry') }}</b>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="err" class="gm-err">{{ err }}</div>
|
||||
|
|
@ -1932,6 +2046,22 @@ useShadowStyles(
|
|||
<div class="gm-stat"><span>{{ t('gospel.stat.population') }}</span><b>{{ fmt(selectedGroup.population) }}</b></div>
|
||||
<div class="gm-stat"><span>{{ t('gospel.stat.countries') }}</span><b>{{ selectedGroup.countries }}</b></div>
|
||||
|
||||
<!-- ═══ WHAT THE DOT MEANS, SAID ON THE SHEET THAT THE DOT OPENED ══════════════════
|
||||
A pin marks where a PEOPLE is found, not a settlement, and the data shows it: 108
|
||||
of the 2,107 placed groups sit on a coordinate they share with another group. Where
|
||||
this one does, it names them, because "approximate" on its own hides the part a
|
||||
reader would never otherwise discover — that some dots are literally the same dot.
|
||||
English prose in a dir="ltr" block, per the standing decision on caveats. -->
|
||||
<p class="gm-note" dir="ltr" style="margin:6px 0 0">
|
||||
The dot marks where this people is found, not a town or a boundary.
|
||||
<template v-if="sharedWith(selectedGroup).length">
|
||||
It sits on the same point as
|
||||
<b>{{ sharedWith(selectedGroup).join(', ') }}</b> — {{ sharedWith(selectedGroup).length + 1 }}
|
||||
groups share this coordinate, so the position tells you the locality and not which
|
||||
group is where.
|
||||
</template>
|
||||
</p>
|
||||
|
||||
<div class="gm-sec">
|
||||
<div class="gm-sec-h">{{ t('gospel.sheet.ownLanguage') }}</div>
|
||||
<div class="gm-chips">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,186 @@
|
|||
/**
|
||||
* build-gospel-by-province.mjs — gospel access BELOW the national border, for the two countries
|
||||
* that hold half the roster.
|
||||
*
|
||||
* WHY ONLY INDIA AND CHINA. 855 of Doxa's 2,107 groups are in India and 154 in China: 47.9% of
|
||||
* everything this map draws, rendered until now as two flat fills. A mobiliser choosing between
|
||||
* Bihar and Tamil Nadu got nothing from the map. No other country comes close — the third is
|
||||
* Sudan at 105 — so this is not the start of a worldwide ADM1 project, it is the two countries
|
||||
* where a national border is useless.
|
||||
*
|
||||
* ⚠ CHINA'S ADM1 FILE IS A SUBSET AND THAT TURNS OUT TO BE THE RIGHT SUBSET. It carries 12
|
||||
* provinces, not China's 31+ — Yunnan, Guizhou, Tibet, Sichuan, Xinjiang, Guangxi, Hainan,
|
||||
* Hunan, Qinghai, Gansu, Inner Mongolia, Heilongjiang. I expected that to lose groups and
|
||||
* measured instead: 152 of 154 Chinese groups fall inside them, and ALL TWELVE are used. The
|
||||
* file was cut to the provinces where the unreached peoples actually are.
|
||||
*
|
||||
* ⚠ AND THE ASSIGNMENT IS ONLY AS GOOD AS THE PIN. A group's province comes from a
|
||||
* point-in-polygon test on a coordinate that marks where a PEOPLE is found, not a settlement —
|
||||
* 108 groups even share a coordinate with another group. Near a border that point can fall on
|
||||
* the wrong side. So every row carries `approximate: true`, the unassigned are COUNTED rather
|
||||
* than dropped, and no surface may present a province as a fact about a group.
|
||||
* Measured: 9 of 855 Indian groups and 2 of 154 Chinese ones land outside every polygon.
|
||||
* They are reported, not hidden.
|
||||
*/
|
||||
import { readFileSync } from 'node:fs'
|
||||
import { resolve, dirname } from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import { writeSnapshot } from './_snapshot-guard.mjs'
|
||||
|
||||
const HERE = dirname(fileURLToPath(import.meta.url))
|
||||
const REPO = resolve(HERE, '../../..')
|
||||
const OUT = resolve(REPO, 'data/tables/gospel-by-province.json')
|
||||
const T = (f) => JSON.parse(readFileSync(resolve(REPO, 'data/tables', f), 'utf8'))
|
||||
const BOUND = (f) => JSON.parse(readFileSync(resolve(REPO, 'public/dx-maps/assets/boundaries', f), 'utf8'))
|
||||
|
||||
const { tiers = {}, codes = {}, bridges = {}, bridgeCandidates = {}, sun } = T('people-group-pins.json')
|
||||
const roster = T('doxa-people-groups.json').rows || []
|
||||
|
||||
/* Ray casting, with holes honoured: a point inside an inner ring is outside the polygon. */
|
||||
const ringHas = (ring, x, y) => {
|
||||
let inside = false
|
||||
for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {
|
||||
const xi = ring[i][0], yi = ring[i][1], xj = ring[j][0], yj = ring[j][1]
|
||||
if (((yi > y) !== (yj > y)) && (x < ((xj - xi) * (y - yi)) / (yj - yi) + xi)) inside = !inside
|
||||
}
|
||||
return inside
|
||||
}
|
||||
const polyHas = (poly, x, y) => {
|
||||
if (!ringHas(poly[0], x, y)) return false
|
||||
for (let k = 1; k < poly.length; k++) if (ringHas(poly[k], x, y)) return false
|
||||
return true
|
||||
}
|
||||
const featHas = (f, x, y) => {
|
||||
const g = f.geometry
|
||||
if (!g) return false
|
||||
if (g.type === 'Polygon') return polyHas(g.coordinates, x, y)
|
||||
if (g.type === 'MultiPolygon') return g.coordinates.some((p) => polyHas(p, x, y))
|
||||
return false
|
||||
}
|
||||
/* A bbox pre-filter: without it this is 1,009 groups x 46 polygons of full ray casting. */
|
||||
const bboxOf = (f) => {
|
||||
const m = [180, 90, -180, -90]
|
||||
const walk = (a) => {
|
||||
if (typeof a[0] === 'number') {
|
||||
m[0] = Math.min(m[0], a[0]); m[1] = Math.min(m[1], a[1])
|
||||
m[2] = Math.max(m[2], a[0]); m[3] = Math.max(m[3], a[1])
|
||||
} else a.forEach(walk)
|
||||
}
|
||||
walk(f.geometry.coordinates)
|
||||
return m
|
||||
}
|
||||
|
||||
/* The same Deaf test the leaf and both builders use — three signals, never the sg flag alone. */
|
||||
const isDeaf = (code, name) => {
|
||||
const c = codes[code]
|
||||
return (c && c.sg === 1) || /sign language/i.test((c && c.l) || '') || /\bDeaf\b/i.test(name || '')
|
||||
}
|
||||
const wayIn = (code, iso3, name) => {
|
||||
if (!code || !iso3) return ''
|
||||
if (isDeaf(code, name)) return sun ? 'SUN (signed)' : ''
|
||||
const b = bridges[`${code}|${iso3}`] || bridgeCandidates[`${code}|${iso3}`]
|
||||
return b ? b.l : ''
|
||||
}
|
||||
|
||||
const COUNTRIES = [
|
||||
{ iso3: 'IND', file: 'gb-IND-ADM1.geojson', country: 'India' },
|
||||
{ iso3: 'CHN', file: 'gb-CHN-ADM1.geojson', country: 'China' },
|
||||
]
|
||||
|
||||
const rows = []
|
||||
const unassigned = []
|
||||
let provincesAvailable = 0
|
||||
for (const c of COUNTRIES) {
|
||||
const feats = BOUND(c.file).features.map((f) => ({ f, b: bboxOf(f), name: f.properties.shapeName }))
|
||||
provincesAvailable += feats.length
|
||||
const groups = roster.filter((r) => r.iso3 === c.iso3 && r.mapped && r.lat != null && r.lng != null)
|
||||
const by = new Map()
|
||||
for (const r of groups) {
|
||||
const x = r.lng, y = r.lat
|
||||
let hit = null
|
||||
for (const cand of feats) {
|
||||
if (x < cand.b[0] || x > cand.b[2] || y < cand.b[1] || y > cand.b[3]) continue
|
||||
if (featHas(cand.f, x, y)) { hit = cand.name; break }
|
||||
}
|
||||
if (!hit) { unassigned.push({ country: c.country, iso3: c.iso3, people_group: r.name, lat: r.lat, lng: r.lng }); continue }
|
||||
if (!by.has(hit)) by.set(hit, [])
|
||||
by.get(hit).push(r)
|
||||
}
|
||||
for (const [province, list] of by) {
|
||||
const zero = list.filter((r) => (tiers[r.iso639_3] ?? r.tier ?? 0) === 0)
|
||||
rows.push({
|
||||
country: c.country,
|
||||
iso3: c.iso3,
|
||||
province,
|
||||
groups: list.length,
|
||||
people: list.reduce((n, r) => n + (r.population || 0), 0),
|
||||
zero_access_groups: zero.length,
|
||||
zero_access_people: zero.reduce((n, r) => n + (r.population || 0), 0),
|
||||
/* Named so a reader of the CSV can act without opening the map. */
|
||||
zero_access_examples: zero.sort((a, b) => (b.population || 0) - (a.population || 0))
|
||||
.slice(0, 3).map((r) => r.name).join('; '),
|
||||
ways_in: [...new Set(zero.map((r) => wayIn(r.iso639_3, r.iso3, r.name)).filter(Boolean))].join('; '),
|
||||
approximate: true,
|
||||
})
|
||||
}
|
||||
}
|
||||
rows.sort((a, b) => b.zero_access_groups - a.zero_access_groups || b.groups - a.groups)
|
||||
|
||||
const assigned = rows.reduce((n, r) => n + r.groups, 0)
|
||||
if (!assigned || assigned < 900) {
|
||||
console.error(`GOSPEL-BY-PROVINCE: REFUSING TO WRITE — only ${assigned} group(s) assigned.`)
|
||||
console.error(' India and China hold 1,009 mapped groups; a collapse this large means the')
|
||||
console.error(' geometry or the coordinates changed shape, not that the answer moved.')
|
||||
process.exitCode = 1
|
||||
} else {
|
||||
writeSnapshot(
|
||||
OUT,
|
||||
`${JSON.stringify({
|
||||
meta: {
|
||||
title: 'Gospel access by province — India and China',
|
||||
why: 'These two countries hold 47.9% of Doxa\'s roster (855 + 154 of 2,107). No other ' +
|
||||
'country is close; the third is Sudan at 105. A national fill cannot answer "where would ' +
|
||||
'a team go" for half the map.',
|
||||
generated: new Date().toISOString().slice(0, 10),
|
||||
provinces_with_groups: rows.length,
|
||||
provinces_available: provincesAvailable,
|
||||
groups_assigned: assigned,
|
||||
groups_unassigned: unassigned.length,
|
||||
china_note: 'China\'s ADM1 file carries 12 provinces, not 31+. Measured rather than ' +
|
||||
'assumed: 152 of 154 Chinese groups fall inside them and all twelve are used, so the ' +
|
||||
'file is cut to the provinces where the unreached peoples are.',
|
||||
ways_in_are_country_level: 'The ways in are chosen for the COUNTRY, and going below the ' +
|
||||
'border is what exposes the cost of that. Arunachal Pradesh, in the far north-east, is ' +
|
||||
'offered TELUGU — a South Indian language — because the curated bridge table names it ' +
|
||||
'for those groups and a curated bridge outranks the computed one. India\'s computed ' +
|
||||
'default is Hindi (41%, official), which is defensible nationally and still wrong for ' +
|
||||
'much of the north-east. This table does not fix that: it makes it visible. Until a ' +
|
||||
'bridge can be chosen per province, read the ways-in column as "a language with ' +
|
||||
'Scripture and film somewhere in this country", not as a recommendation for this place.',
|
||||
approximate: 'A province is assigned by point-in-polygon on the group\'s coordinate, and ' +
|
||||
'that coordinate marks where a PEOPLE is found, not a settlement — 108 groups across the ' +
|
||||
'roster even share a coordinate with another group. Near a border the point can fall on ' +
|
||||
'the wrong side. Every row is flagged approximate and the unassigned are counted, never ' +
|
||||
'dropped. No surface may present a province as a fact about a group.',
|
||||
},
|
||||
columns: [
|
||||
{ title: 'Country', field: 'country', type: 'string' },
|
||||
{ title: 'Province', field: 'province', type: 'string' },
|
||||
{ title: 'People groups', field: 'groups', type: 'number' },
|
||||
{ title: 'People', field: 'people', type: 'number' },
|
||||
{ title: 'Groups with nothing', field: 'zero_access_groups', type: 'number' },
|
||||
{ title: 'People with nothing', field: 'zero_access_people', type: 'number' },
|
||||
{ title: 'Largest with nothing', field: 'zero_access_examples', type: 'string' },
|
||||
{ title: 'Ways in', field: 'ways_in', type: 'string' },
|
||||
{ title: 'Placement approximate', field: 'approximate', type: 'string' },
|
||||
],
|
||||
rows,
|
||||
unassigned,
|
||||
}, null, 1)}\n`,
|
||||
(j) => (j.rows || []).length,
|
||||
'province row(s)',
|
||||
)
|
||||
console.log(`gospel-by-province: ${rows.length} province(s) with groups, ${assigned} assigned, ${unassigned.length} unassigned`)
|
||||
console.log(` zero-access provinces: ${rows.filter((r) => r.zero_access_groups).length}`)
|
||||
console.log(`wrote ${OUT}`)
|
||||
}
|
||||
670
public/dx-maps/assets/tables/gospel-by-province.json
Normal file
670
public/dx-maps/assets/tables/gospel-by-province.json
Normal file
|
|
@ -0,0 +1,670 @@
|
|||
{
|
||||
"meta": {
|
||||
"title": "Gospel access by province — India and China",
|
||||
"why": "These two countries hold 47.9% of Doxa's roster (855 + 154 of 2,107). No other country is close; the third is Sudan at 105. A national fill cannot answer \"where would a team go\" for half the map.",
|
||||
"generated": "2026-09-26",
|
||||
"provinces_with_groups": 44,
|
||||
"provinces_available": 46,
|
||||
"groups_assigned": 998,
|
||||
"groups_unassigned": 11,
|
||||
"china_note": "China's ADM1 file carries 12 provinces, not 31+. Measured rather than assumed: 152 of 154 Chinese groups fall inside them and all twelve are used, so the file is cut to the provinces where the unreached peoples are.",
|
||||
"ways_in_are_country_level": "The ways in are chosen for the COUNTRY, and going below the border is what exposes the cost of that. Arunachal Pradesh, in the far north-east, is offered TELUGU — a South Indian language — because the curated bridge table names it for those groups and a curated bridge outranks the computed one. India's computed default is Hindi (41%, official), which is defensible nationally and still wrong for much of the north-east. This table does not fix that: it makes it visible. Until a bridge can be chosen per province, read the ways-in column as \"a language with Scripture and film somewhere in this country\", not as a recommendation for this place.",
|
||||
"approximate": "A province is assigned by point-in-polygon on the group's coordinate, and that coordinate marks where a PEOPLE is found, not a settlement — 108 groups across the roster even share a coordinate with another group. Near a border the point can fall on the wrong side. Every row is flagged approximate and the unassigned are counted, never dropped. No surface may present a province as a fact about a group."
|
||||
},
|
||||
"columns": [
|
||||
{
|
||||
"title": "Country",
|
||||
"field": "country",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "Province",
|
||||
"field": "province",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "People groups",
|
||||
"field": "groups",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "People",
|
||||
"field": "people",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "Groups with nothing",
|
||||
"field": "zero_access_groups",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "People with nothing",
|
||||
"field": "zero_access_people",
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"title": "Largest with nothing",
|
||||
"field": "zero_access_examples",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "Ways in",
|
||||
"field": "ways_in",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"title": "Placement approximate",
|
||||
"field": "approximate",
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"rows": [
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Yunnan Province",
|
||||
"groups": 61,
|
||||
"people": 3524875,
|
||||
"zero_access_groups": 14,
|
||||
"zero_access_people": 602850,
|
||||
"zero_access_examples": "Hongjin Tai; Wenma Zhuang; Mosuo",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Guizhou Province",
|
||||
"groups": 34,
|
||||
"people": 3302000,
|
||||
"zero_access_groups": 7,
|
||||
"zero_access_people": 488900,
|
||||
"zero_access_examples": "Huishui Miao; Yanghuang; Cai",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Sichuan Province",
|
||||
"groups": 12,
|
||||
"people": 1621700,
|
||||
"zero_access_groups": 7,
|
||||
"zero_access_people": 105700,
|
||||
"zero_access_examples": "Ersu; Minyak; Namuyi",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Andaman and Nicobar Islands",
|
||||
"groups": 7,
|
||||
"people": 81900,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 500,
|
||||
"zero_access_examples": "Jarawas; Onge",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Arunāchal Pradesh",
|
||||
"groups": 7,
|
||||
"people": 13550,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 600,
|
||||
"zero_access_examples": "Khamba; Na",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Xinjiang Uyghur Autonomous Region",
|
||||
"groups": 7,
|
||||
"people": 284125,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 31500,
|
||||
"zero_access_examples": "Sarikoli Tajiks; Ainu",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Hunan Province",
|
||||
"groups": 5,
|
||||
"people": 2405000,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 150000,
|
||||
"zero_access_examples": "Eastern Xiangxi Miao; Wunai",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Qinghai Province",
|
||||
"groups": 3,
|
||||
"people": 55700,
|
||||
"zero_access_groups": 2,
|
||||
"zero_access_people": 12700,
|
||||
"zero_access_examples": "Tongren Bonan; Wutun",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Kerala",
|
||||
"groups": 72,
|
||||
"people": 2804375,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 8600,
|
||||
"zero_access_examples": "Malai Pandaram",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Jhārkhand",
|
||||
"groups": 9,
|
||||
"people": 957400,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 5000,
|
||||
"zero_access_examples": "Jadupetia",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Guangxi Zhuang Autonomous Region",
|
||||
"groups": 6,
|
||||
"people": 121150,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 750,
|
||||
"zero_access_examples": "Yerong",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Manipur",
|
||||
"groups": 5,
|
||||
"people": 321400,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 1700,
|
||||
"zero_access_examples": "Koiren",
|
||||
"ways_in": "Telugu",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Inner Mongolia Autonomous Region",
|
||||
"groups": 3,
|
||||
"people": 206900,
|
||||
"zero_access_groups": 1,
|
||||
"zero_access_people": 170000,
|
||||
"zero_access_examples": "Buryat",
|
||||
"ways_in": "Chinese, Mandarin",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Gujarāt",
|
||||
"groups": 90,
|
||||
"people": 3164770,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Andhra Pradesh",
|
||||
"groups": 81,
|
||||
"people": 4858130,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Karnātaka",
|
||||
"groups": 81,
|
||||
"people": 4610175,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Tamil Nādu",
|
||||
"groups": 64,
|
||||
"people": 2760850,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Odisha",
|
||||
"groups": 64,
|
||||
"people": 1304500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Mahārāshtra",
|
||||
"groups": 53,
|
||||
"people": 2858050,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Rājasthān",
|
||||
"groups": 48,
|
||||
"people": 1731500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Madhya Pradesh",
|
||||
"groups": 33,
|
||||
"people": 2922600,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Jammu and Kashmīr",
|
||||
"groups": 33,
|
||||
"people": 520515,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "West Bengal",
|
||||
"groups": 30,
|
||||
"people": 2211000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Telangāna",
|
||||
"groups": 26,
|
||||
"people": 1665800,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Chhattīsgarh",
|
||||
"groups": 24,
|
||||
"people": 1916750,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Uttar Pradesh",
|
||||
"groups": 23,
|
||||
"people": 836550,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Himāchal Pradesh",
|
||||
"groups": 20,
|
||||
"people": 114970,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Bihār",
|
||||
"groups": 18,
|
||||
"people": 430100,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Assam",
|
||||
"groups": 15,
|
||||
"people": 2377400,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Tibet Autonomous Region",
|
||||
"groups": 13,
|
||||
"people": 208750,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Tripura",
|
||||
"groups": 11,
|
||||
"people": 698500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Uttarākhand",
|
||||
"groups": 7,
|
||||
"people": 111875,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Ladākh",
|
||||
"groups": 6,
|
||||
"people": 183000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Goa",
|
||||
"groups": 5,
|
||||
"people": 337600,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Haryāna",
|
||||
"groups": 4,
|
||||
"people": 69500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Punjab",
|
||||
"groups": 4,
|
||||
"people": 10100,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Gansu Province",
|
||||
"groups": 3,
|
||||
"people": 21400,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Hainan Province",
|
||||
"groups": 3,
|
||||
"people": 1096500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Meghālaya",
|
||||
"groups": 2,
|
||||
"people": 17150,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"province": "Heilongjiang Province",
|
||||
"groups": 2,
|
||||
"people": 5000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Delhi",
|
||||
"groups": 1,
|
||||
"people": 1200,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Chandīgarh",
|
||||
"groups": 1,
|
||||
"people": 34000,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Puducherry",
|
||||
"groups": 1,
|
||||
"people": 20500,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"province": "Sikkim",
|
||||
"groups": 1,
|
||||
"people": 7400,
|
||||
"zero_access_groups": 0,
|
||||
"zero_access_people": 0,
|
||||
"zero_access_examples": "",
|
||||
"ways_in": "",
|
||||
"approximate": true
|
||||
}
|
||||
],
|
||||
"unassigned": [
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Bharwad",
|
||||
"lat": 20.322175,
|
||||
"lng": 72.968458
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Great Andamanese",
|
||||
"lat": 12.211728,
|
||||
"lng": 92.833491
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Indo-French",
|
||||
"lat": 11.930182,
|
||||
"lng": 79.797144
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Indo-Vietnamese",
|
||||
"lat": 11.912456,
|
||||
"lng": 79.815389
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Laccadive",
|
||||
"lat": 10.0675,
|
||||
"lng": 73.6422
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Sagharias",
|
||||
"lat": 20.71815,
|
||||
"lng": 70.988939
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Sentinelese",
|
||||
"lat": 11.557662,
|
||||
"lng": 92.267154
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Vettalaikarans",
|
||||
"lat": 11.916308,
|
||||
"lng": 79.807019
|
||||
},
|
||||
{
|
||||
"country": "India",
|
||||
"iso3": "IND",
|
||||
"people_group": "Vettiyan",
|
||||
"lat": 11.91386,
|
||||
"lng": 79.814472
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"people_group": "Jing",
|
||||
"lat": 21.577774,
|
||||
"lng": 108.126828
|
||||
},
|
||||
{
|
||||
"country": "China",
|
||||
"iso3": "CHN",
|
||||
"people_group": "Pana",
|
||||
"lat": 21.246492,
|
||||
"lng": 101.27182
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -578,7 +578,7 @@
|
|||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "dx-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN",
|
||||
"integrity": "sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -598,7 +598,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -612,7 +612,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -626,7 +626,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -640,7 +640,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -654,7 +654,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -578,7 +578,7 @@
|
|||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "dx-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN",
|
||||
"integrity": "sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -598,7 +598,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -612,7 +612,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -626,7 +626,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -640,7 +640,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -654,7 +654,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-EEv5EIeYlfcc/18mpRyemu5whV6kuQFfMwduCkaslz9URcrcWmlmLsMrFxZvOiHN\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<!-- Mapbox engine, fetched early. Keep it only with a real Mapbox token in \"tk\": without one (or with \"provider\":\"maplibre\") the map draws with MapLibre and this line must go -->\n<link rel=\"preload\" as=\"script\" href=\"https://api.mapbox.com/mapbox-gl-js/v3.24.0/mapbox-gl.js\" integrity=\"sha384-tO0clamXONKwbiz7O6xJpUeyJbTSPugC+xM9clvfFvKTH3i8SmCawHGdf5quMWmZ\" crossorigin=\"anonymous\">\n<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-vOIYJyGSOBMKagYZMXgaARieQnSXVp3kJnNO4BlgVakMHV8he27DFGNzhJitWKXW\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in a new issue