diff --git a/counterexamples/divisions/division_area/bad-is-land.yaml b/counterexamples/divisions/division_area/bad-is-land.yaml new file mode 100644 index 00000000..d83b8b2f --- /dev/null +++ b/counterexamples/divisions/division_area/bad-is-land.yaml @@ -0,0 +1,16 @@ +--- +id: counterexample:division_area:bad-is-land +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_area + version: 0 + subtype: country + division_id: counterexample:division_boundary:some-division + is_land: yes + country: ZZ + ext_expected_errors: + - "is_land/type]: got string, want boolean" diff --git a/counterexamples/divisions/division_area/bad-is-territorial.yaml b/counterexamples/divisions/division_area/bad-is-territorial.yaml new file mode 100644 index 00000000..31282ee4 --- /dev/null +++ b/counterexamples/divisions/division_area/bad-is-territorial.yaml @@ -0,0 +1,17 @@ +--- +id: counterexample:division_area:bad-is-territorial +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_area + version: 0 + subtype: country + division_id: counterexample:division_boundary:some-division + is_territorial: no + is_land: true + country: ZZ + ext_expected_errors: + - "is_territorial/type]: got string, want boolean" diff --git a/counterexamples/divisions/division_area/bad-missing-is-land.yaml b/counterexamples/divisions/division_area/bad-missing-is-land.yaml new file mode 100644 index 00000000..3c701834 --- /dev/null +++ b/counterexamples/divisions/division_area/bad-missing-is-land.yaml @@ -0,0 +1,14 @@ +--- +id: counterexample:division_area:bad-is-territorial +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_area + version: 0 + subtype: country + division_id: counterexample:division_boundary:some-division + is_territorial: false + country: ZZ \ No newline at end of file diff --git a/counterexamples/divisions/division_boundary/bad-is-land.yaml b/counterexamples/divisions/division_boundary/bad-is-land.yaml new file mode 100644 index 00000000..11835e6a --- /dev/null +++ b/counterexamples/divisions/division_boundary/bad-is-land.yaml @@ -0,0 +1,18 @@ +--- +id: counterexample:division_boundary:bad-is-land +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_boundary + version: 0 + subtype: country + division_ids: ["example:division:country:left", "example:division:country:right"] + is_land: yes + is_territorial: false + class: land + country: ZZ + ext_expected_errors: + - "is_land/type]: got string, want boolean" diff --git a/counterexamples/divisions/division_boundary/bad-is-territorial.yaml b/counterexamples/divisions/division_boundary/bad-is-territorial.yaml new file mode 100644 index 00000000..4ee7d2af --- /dev/null +++ b/counterexamples/divisions/division_boundary/bad-is-territorial.yaml @@ -0,0 +1,18 @@ +--- +id: counterexample:division_boundary:bad-is-territorial +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_boundary + version: 0 + subtype: country + division_ids: ["example:division:country:left", "example:division:country:right"] + class: land + is_territorial: no + is_land: true + country: ZZ + ext_expected_errors: + - "is_territorial/type]: got string, want boolean" \ No newline at end of file diff --git a/counterexamples/divisions/division_boundary/bad-not-both.yaml b/counterexamples/divisions/division_boundary/bad-not-both.yaml new file mode 100644 index 00000000..bee287fe --- /dev/null +++ b/counterexamples/divisions/division_boundary/bad-not-both.yaml @@ -0,0 +1,17 @@ +--- +id: example:division_boundary:is_land:country:us +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_boundary + version: 1 + subtype: country + is_land: true + is_territorial: true + class: land + division_ids: ["example:division:country:left", "example:division:country:right"] + ext_expected_errors: + - "division_boundary.yaml#/properties/properties/oneOf]: oneOf failed, subschemas 0, 1 matched" \ No newline at end of file diff --git a/counterexamples/divisions/division_boundary/missing-class.yaml b/counterexamples/divisions/division_boundary/missing-class.yaml index 1f353099..05275403 100644 --- a/counterexamples/divisions/division_boundary/missing-class.yaml +++ b/counterexamples/divisions/division_boundary/missing-class.yaml @@ -9,6 +9,8 @@ properties: type: division_boundary version: 0 subtype: macroregion + is_territorial: true + is_land: false division_ids: ["example:division:country:left", "example:division:country:right"] ext_expected_errors: - "missing property 'class'" diff --git a/counterexamples/divisions/division_boundary/missing-division_ids.yaml b/counterexamples/divisions/division_boundary/missing-division_ids.yaml index 4fd4b8b8..12e99fb8 100644 --- a/counterexamples/divisions/division_boundary/missing-division_ids.yaml +++ b/counterexamples/divisions/division_boundary/missing-division_ids.yaml @@ -9,6 +9,8 @@ properties: type: division_boundary version: 0 class: land + is_territorial: false + is_land: true subtype: macrocounty ext_expected_errors: - "missing property 'division_ids'" diff --git a/counterexamples/divisions/division_boundary/missing-subtype.yaml b/counterexamples/divisions/division_boundary/missing-subtype.yaml index 76aea6ea..b06c8106 100644 --- a/counterexamples/divisions/division_boundary/missing-subtype.yaml +++ b/counterexamples/divisions/division_boundary/missing-subtype.yaml @@ -9,6 +9,8 @@ properties: type: division_boundary version: 0 class: land + is_territorial: false + is_land: true division_ids: ["example:division:country:left", "example:division:country:right"] ext_expected_errors: - "missing property 'subtype'" diff --git a/examples/divisions/division_area/country_land.yaml b/examples/divisions/division_area/country_land.yaml index 07fa30ab..f7620a99 100644 --- a/examples/divisions/division_area/country_land.yaml +++ b/examples/divisions/division_area/country_land.yaml @@ -304,6 +304,8 @@ properties: version: 0 subtype: country class: land + is_land: true + is_territorial: false division_id: example:division:country:us names: primary: United States diff --git a/examples/divisions/division_area/country_maritime.yaml b/examples/divisions/division_area/country_maritime.yaml index e95ef17b..6da93d96 100644 --- a/examples/divisions/division_area/country_maritime.yaml +++ b/examples/divisions/division_area/country_maritime.yaml @@ -78,6 +78,8 @@ properties: version: 0 subtype: country class: maritime + is_territorial: true + is_land: false division_id: example:division:country:fi names: primary: Suomi diff --git a/examples/divisions/division_area/is_land.yaml b/examples/divisions/division_area/is_land.yaml new file mode 100644 index 00000000..6ade21cb --- /dev/null +++ b/examples/divisions/division_area/is_land.yaml @@ -0,0 +1,312 @@ +--- +id: example:division_area:is_land:country:us +type: Feature +geometry: + type: MultiPolygon + coordinates: [ + [ + [ + [-170.6290015, 25.3053671], + [-170.4076134, 25.5082632], + [-170.6300336, 25.7076006], + [-170.8506754, 25.5056948], + [-170.6290015, 25.3053671] + ] + ], + [ + [ + [-171.7380245, 25.555318], + [-171.4949943, 25.7747795], + [-171.726725, 25.9865667], + [-171.9674222, 25.7845748], + [-171.7380245, 25.555318] + ] + ], + [ + [ + [-174.0155727, 25.8411597], + [-173.7437151, 26.0119599], + [-173.905507, 26.2639004], + [-174.2280618, 26.0816774], + [-174.0155727, 25.8411597] + ] + ], + [ + [ + [-175.9506918, 27.5543172], + [-175.5545765, 27.7281369], + [-175.6295776, 28.1237431], + [-176.1866168, 27.9330153], + [-175.9506918, 27.5543172] + ] + ], + [ + [ + [-166.1182936, 23.4254685], + [-165.8702478, 23.8636297], + [-166.3767961, 24.0561939], + [-166.5303209, 23.7815879], + [-166.1182936, 23.4254685] + ] + ], + [ + [ + [-167.9975573, 24.7968943], + [-167.778217, 25.0023686], + [-168.005803, 25.20088], + [-168.2206497, 24.9967937], + [-167.9975573, 24.7968943] + ] + ], + [ + [ + [-157.4082814, 55.576068], + [-157.1024297, 55.6733491], + [-157.0908436, 55.8696588], + [-157.7232999, 55.870247], + [-157.4082814, 55.576068] + ] + ], + [ + [ + [-155.6071465, 55.55087], + [-155.2980807, 56.0385909], + [-156.1270413, 55.9006965], + [-156.0182299, 55.6525826], + [-155.6071465, 55.55087] + ] + ], + [ + [ + [-178.3063127, 28.1837783], + [-178.0577766, 28.4309636], + [-178.3589518, 28.655272], + [-178.60056, 28.4012455], + [-178.3063127, 28.1837783] + ] + ], + [ + [ + [-179.1390989, 51.0070029], + [-173.0611771, 51.8159234], + [-171.9740685, 52.3514335], + [-178.9229631, 52.0275532], + [-179.1390989, 51.0070029] + ] + ], + [ + [ + [-180, 51.7940888], + [-179.8836979, 51.9764894], + [-180, 52.138489], + [-180, 51.8434509], + [-180, 51.7940888] + ] + ], + [ + [ + [-170.3952428, 56.8431693], + [-169.6956679, 57.0307607], + [-169.5801239, 57.2365744], + [-170.6525321, 57.3494254], + [-170.3952428, 56.8431693] + ] + ], + [ + [ + [-169.5771945, 56.3323838], + [-169.1322924, 56.6737641], + [-170.1288343, 56.6777795], + [-170.0250438, 56.4580184], + [-169.5771945, 56.3323838] + ] + ], + [ + [ + [-168.0561273, 64.76067], + [-167.5930406, 65.0286657], + [-168.5591053, 65.007885], + [-168.4482776, 64.8327172], + [-168.0561273, 64.76067] + ] + ], + [ + [ + [-156.6720152, 20.3000654], + [-155.800111, 20.8826396], + [-158.455088, 21.6943824], + [-158.2462379, 21.1430868], + [-156.6720152, 20.3000654] + ] + ], + [ + [ + [-160.5398128, 21.4482644], + [-159.3028431, 21.7124132], + [-159.1241278, 22.2798801], + [-160.2161715, 22.1993854], + [-160.5398128, 21.4482644] + ] + ], + [ + [ + [-161.9236658, 22.8550496], + [-161.6972866, 23.0665997], + [-161.9360903, 23.2652845], + [-162.1455351, 23.0568827], + [-161.9236658, 22.8550496] + ] + ], + [ + [ + [-164.7000199, 23.3734366], + [-164.4760626, 23.575844], + [-164.7056774, 23.7796906], + [-164.9238496, 23.5726775], + [-164.7000199, 23.3734366] + ] + ], + [ + [ + [-155.6810194, 18.7091718], + [-154.595509, 19.5434371], + [-155.877534, 20.4681176], + [-156.2732568, 19.7049213], + [-155.6810194, 18.7091718] + ] + ], + [ + [ + [-82.8732511, 24.4116731], + [-82.5948517, 24.5902399], + [-82.7300073, 24.8395704], + [-83.153058, 24.6776636], + [-82.8732511, 24.4116731] + ] + ], + [ + [ + [-81.8773353, 24.2520071], + [-68.1545602, 47.3251568], + [-82.6797222, 41.6765556], + [-84.129, 46.5305], + [-94.9573889, 49.3701944], + [-125.0271096, 48.4630615], + [-119.6795205, 33.0665347], + [-97.40561, 25.83764], + [-84.0549877, 29.8627705], + [-81.8773353, 24.2520071] + ] + ], + [ + [ + [179.2356588, 51.1468561], + [178.6498473, 52.169477], + [176.8813625, 51.9348227], + [177.1853792, 51.6303915], + [179.2356588, 51.1468561] + ] + ], + [ + [ + [179.6302237, 51.6862391], + [180, 52.1384488], + [179.2193828, 52.1042624], + [179.2227021, 51.833522], + [179.6302237, 51.6862391] + ] + ], + [ + [ + [175.915408, 52.1325238], + [176.2623207, 52.4572425], + [175.5671255, 52.4969017], + [175.5586568, 52.2829505], + [175.915408, 52.1325238] + ] + ], + [ + [ + [173.6474085, 52.1472948], + [174.8392132, 52.6878183], + [172.1158739, 52.9881155], + [173.132385, 52.2506975], + [173.6474085, 52.1472948] + ] + ], + [ + [ + [-146.3855284, 59.1843829], + [-145.9234279, 59.3169728], + [-145.8952803, 59.5345003], + [-146.6535985, 59.6545361], + [-146.3855284, 59.1843829] + ] + ], + [ + [ + [-171.2797217, 52.2444061], + [-145.9885379, 60.1761058], + [-130.003485, 56.008075], + [-141.00198, 60.3063692], + [-140.7523256, 69.8283004], + [-156.6515529, 71.581159], + [-169.0485821, 65.4690061], + [-161.2500247, 63.8004626], + [-167.6542464, 59.9434356], + [-158.0753114, 57.7475562], + [-171.2797217, 52.2444061] + ], + [ + [-153.8125943, 58.0958144], + [-153.5773523, 58.3547948], + [-153.3559904, 58.4231127], + [-153.6200524, 58.260124], + [-153.8125943, 58.0958144] + ], + [ + [-153.1820044, 58.5355625], + [-153.1751501, 58.5480609], + [-153.1384992, 58.5678286], + [-153.1470249, 58.5552926], + [-153.1820044, 58.5355625] + ], + [ + [-152.8741566, 58.7660471], + [-152.9882543, 59.4696836], + [-152.1322999, 60.0079718], + [-152.330171, 59.1676267], + [-152.8741566, 58.7660471] + ] + ], + [ + [ + [-172.7696055, 59.9963072], + [-171.8272619, 60.3517559], + [-173.4406927, 60.7880772], + [-173.4413238, 60.4223353], + [-172.7696055, 59.9963072] + ] + ], + [ + [ + [-169.6463302, 62.736964], + [-168.2509717, 63.332816], + [-172.2753008, 63.6094455], + [-172.0058757, 63.2057208], + [-169.6463302, 62.736964] + ] + ] + ] +properties: + theme: divisions + type: division_area + subtype: country + is_land: true + is_territorial: false + country: US + version: 0 + class: land + division_id: example:division:country:us + names: + primary: United States \ No newline at end of file diff --git a/examples/divisions/division_area/is_territorial.yaml b/examples/divisions/division_area/is_territorial.yaml new file mode 100644 index 00000000..18b8edda --- /dev/null +++ b/examples/divisions/division_area/is_territorial.yaml @@ -0,0 +1,86 @@ +--- +id: example:division_area:is_territorial:country:fi +type: Feature +geometry: + type: Polygon + coordinates: + - - [24.1149326, 65.1739343] + - [22.965913, 64.2461008] + - [22.9611467, 64.2200974] + - [20.1690736, 63.1704] + - [20.1635668, 63.1664346] + - [20.7968544, 62.025131] + - [20.8113847, 61.9869932] + - [20.7731398, 61.1334808] + - [20.7714495, 61.1269079] + - [19.2266918, 60.612911] + - [19.2134721, 60.610071] + - [19.0881715, 60.2028008] + - [19.0832, 60.1916833] + - [20.2889918, 59.4641746] + - [20.2949231, 59.4620801] + - [27.4560114, 60.223152] + - [27.4566541, 60.2232587] + - [31.5848283, 62.9070414] + - [31.5867071, 62.9087094] + - [29.9792123, 63.7533602] + - [29.9718903, 63.7571676] + - [30.5280169, 64.0488769] + - [30.5535801, 64.1016818] + - [29.6152439, 64.9174367] + - [29.6110374, 64.9273269] + - [29.7539876, 65.6093614] + - [29.7218642, 65.6370848] + - [30.1204275, 65.7484154] + - [30.1193675, 65.7521935] + - [29.0335178, 66.9246111] + - [29.0331668, 66.9255206] + - [30.0120699, 67.6649442] + - [30.0170617, 67.6735368] + - [28.7084312, 68.185236] + - [28.6461349, 68.1963023] + - [28.4446345, 68.5223038] + - [28.433932, 68.539671] + - [28.7947914, 68.8607869] + - [28.8007886, 68.8692833] + - [28.4291269, 68.9077986] + - [28.4157885, 68.9154506] + - [29.2950412, 69.4498488] + - [29.3364956, 69.4783227] + - [27.9604365, 70.089821] + - [27.9593778, 70.0921111] + - [25.9751031, 69.7083076] + - [25.9712362, 69.707112] + - [25.7752318, 69.0142604] + - [25.7746414, 69.0134805] + - [24.9050854, 68.5700172] + - [24.9031658, 68.5545918] + - [22.4047437, 68.721914] + - [22.3745217, 68.7166666] + - [21.6591391, 69.2559218] + - [21.6270859, 69.2765883] + - [20.5523258, 69.0600767] + - [20.5486365, 69.0599735] + - [23.6496681, 67.9616712] + - [23.6511967, 67.9607085] + - [23.3944185, 67.4851454] + - [23.3944231, 67.4842768] + - [23.9945079, 66.8234885] + - [23.9956629, 66.822049] + - [23.6455681, 66.3021131] + - [23.6456201, 66.3013903] + - [24.1526454, 65.8629123] + - [24.152978, 65.862572] + - [24.1149326, 65.1739343] +properties: + theme: divisions + type: division_area + subtype: country + is_territorial: true + is_land: false + country: FI + version: 0 + class: land + division_id: example:division:country:fi + names: + primary: Finland diff --git a/examples/divisions/division_area/region_land.yaml b/examples/divisions/division_area/region_land.yaml index 0e5e2002..6fa85786 100644 --- a/examples/divisions/division_area/region_land.yaml +++ b/examples/divisions/division_area/region_land.yaml @@ -73,6 +73,8 @@ properties: version: 0 subtype: region class: land + is_land: true + is_territorial: false division_id: example:division:country:it names: primary: Umbria diff --git a/examples/divisions/division_boundary/disputed.yaml b/examples/divisions/division_boundary/disputed.yaml index 5a406a15..525a80bb 100644 --- a/examples/divisions/division_boundary/disputed.yaml +++ b/examples/divisions/division_boundary/disputed.yaml @@ -10,6 +10,8 @@ properties: version: 1 subtype: country class: land + is_land: true + is_territorial: false division_ids: ["example:division:country:left", "example:division:country:right"] is_disputed: true perspectives: diff --git a/examples/divisions/division_boundary/disputed_both.yaml b/examples/divisions/division_boundary/disputed_both.yaml index 781fc23a..ee491390 100644 --- a/examples/divisions/division_boundary/disputed_both.yaml +++ b/examples/divisions/division_boundary/disputed_both.yaml @@ -10,6 +10,8 @@ properties: version: 1 subtype: country class: land + is_land: true + is_territorial: false division_ids: ["example:division:country:left", "example:division:country:right"] is_disputed: true perspectives: diff --git a/examples/divisions/division_boundary/is_land.yaml b/examples/divisions/division_boundary/is_land.yaml new file mode 100644 index 00000000..418a89f9 --- /dev/null +++ b/examples/divisions/division_boundary/is_land.yaml @@ -0,0 +1,15 @@ +--- +id: example:division_boundary:is_land:country:us +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_boundary + version: 1 + subtype: country + is_land: true + is_territorial: false + class: land + division_ids: ["example:division:country:left", "example:division:country:right"] \ No newline at end of file diff --git a/examples/divisions/division_boundary/is_territorial.yaml b/examples/divisions/division_boundary/is_territorial.yaml new file mode 100644 index 00000000..f5d8b34b --- /dev/null +++ b/examples/divisions/division_boundary/is_territorial.yaml @@ -0,0 +1,16 @@ +--- +id: example:division_boundary:is_territorial:country:fi + +type: Feature +geometry: + type: LineString + coordinates: [[0, 1], [1, 2]] +properties: + theme: divisions + type: division_boundary + version: 1 + subtype: country + is_territorial: true + is_land: false + class: maritime + division_ids: ["example:division:country:left", "example:division:country:right"] \ No newline at end of file diff --git a/examples/divisions/division_boundary/land_region.yaml b/examples/divisions/division_boundary/land_region.yaml index bb7c57c5..1c9f86d0 100644 --- a/examples/divisions/division_boundary/land_region.yaml +++ b/examples/divisions/division_boundary/land_region.yaml @@ -10,4 +10,6 @@ properties: version: 1 subtype: region class: land + is_land: true + is_territorial: false division_ids: ["example:division:region:left", "example:division:region:right"] diff --git a/examples/divisions/division_boundary/maritime_country.yaml b/examples/divisions/division_boundary/maritime_country.yaml index a9e77a1a..13d73ed4 100644 --- a/examples/divisions/division_boundary/maritime_country.yaml +++ b/examples/divisions/division_boundary/maritime_country.yaml @@ -10,4 +10,6 @@ properties: version: 1 subtype: country class: maritime + is_territorial: true + is_land: false division_ids: ["example:division:region:left", "example:division:region:right"] diff --git a/schema/divisions/division_area.yaml b/schema/divisions/division_area.yaml index 76a18409..985bdd60 100644 --- a/schema/divisions/division_area.yaml +++ b/schema/divisions/division_area.yaml @@ -22,10 +22,17 @@ properties: # JSON Schema: Top-level object properties. - "$ref": https://geojson.org/schema/MultiPolygon.json properties: # GeoJSON: top-level object 'properties' property. unevaluatedProperties: false - required: [names, subtype, class, country, division_id] + required: [names, subtype, class, country, division_id, is_land, is_territorial] allOf: - "$ref": ../defs.yaml#/$defs/propertyContainers/overtureFeaturePropertiesContainer - "$ref": ../defs.yaml#/$defs/propertyContainers/namesContainer + anyOf: + - properties: + is_land: + const: true + - properties: + is_territorial: + const: true properties: # JSON Schema: properties within GeoJSON top-level object 'properties' property subtype: { "$ref": "./defs.yaml#/$defs/propertyDefinitions/placetype" } class: @@ -36,6 +43,19 @@ properties: # JSON Schema: Top-level object properties. - maritime # The area extends beyond the coastline, in most # cases to the extent of the division's # territorial sea, if it has one. + is_land: + description: + A boolean to indicate whether or not the feature geometry represents the + land-clipped, non-maritime boundary. The geometry can be used for map + rendering, cartographic display, and similar purposes. + type: boolean + is_territorial: + description: + A boolean to indicate whether or not the feature geometry represents + Overture's best approximation of this place's maritime boundary. For + coastal places, this would tend to include the water area. The geometry + can be used for data processing, reverse-geocoding, and similar purposes. + type: boolean division_id: description: Division ID of the division this area belongs to. diff --git a/schema/divisions/division_boundary.yaml b/schema/divisions/division_boundary.yaml index 3b12aa4d..af1a380d 100644 --- a/schema/divisions/division_boundary.yaml +++ b/schema/divisions/division_boundary.yaml @@ -17,9 +17,16 @@ properties: # JSON Schema: Top-level object properties. - "$ref": https://geojson.org/schema/MultiLineString.json properties: # GeoJSON: top-level object 'properties' property. unevaluatedProperties: false - required: [subtype, class, division_ids] + required: [subtype, class, division_ids, is_land, is_territorial] allOf: - "$ref": ../defs.yaml#/$defs/propertyContainers/overtureFeaturePropertiesContainer + oneOf: + - properties: + is_land: + const: true + - properties: + is_territorial: + const: true properties: # JSON Schema: properties within GeoJSON top-level object 'properties' property subtype: { "$ref": "./defs.yaml#/$defs/propertyDefinitions/placetype" } class: @@ -30,6 +37,19 @@ properties: # JSON Schema: Top-level object properties. - maritime # All the boundary geometry extends beyond the # coastline of both associated divisions. + is_land: + description: + A boolean to indicate whether or not the feature geometry represents the + land-clipped, non-maritime boundary. The geometry can be used for map + rendering, cartographic display, and similar purposes. + type: boolean + is_territorial: + description: + A boolean to indicate whether or not the feature geometry represents + Overture's best approximation of this place's maritime boundary. For + coastal places, this would tend to include the water area. The geometry + can be used for data processing, reverse-geocoding, and similar purposes. + type: boolean division_ids: description: Identifies the two divisions to the left and right, respectively, of