Skip to content

Commit

Permalink
Merge pull request #7044 from TerriaJS/issue-4937
Browse files Browse the repository at this point in the history
Issue 4937
  • Loading branch information
nf-s authored Mar 4, 2024
2 parents 83a92b3 + 7c4535b commit 984f6b8
Show file tree
Hide file tree
Showing 25 changed files with 410 additions and 19 deletions.
3 changes: 2 additions & 1 deletion lib/Traits/TraitsClasses/ArcGisPortalItemTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ import UrlTraits from "./UrlTraits";
import { traitClass } from "../Trait";

@traitClass({
description: `Creates an item or group that referehces an item in ArcGIS portal.
description: `Creates an item or group that references an item in ArcGIS portal.
<strong>Note:</strong>
<li>The <code>itemId</code> in the example is the referenced item's ID in the portal.</li>
<li>Not all referenced items can be added to the map. E.g., some types need conversions.</li>`,
Expand Down
26 changes: 26 additions & 0 deletions lib/Traits/TraitsClasses/AssImpCatalogItemTraits.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,34 @@
import primitiveArrayTrait from "../Decorators/primitiveArrayTrait";
import primitiveTrait from "../Decorators/primitiveTrait";
import { traitClass } from "../Trait";
import mixTraits from "../mixTraits";
import GltfCatalogItemTraits from "./GltfCatalogItemTraits";

@traitClass({
description: `Creates one catalog item from url that points to a 3d model.`,
example: {
type: "assimp",
name: "assimp example",
urls: [
"https://raw.githubusercontent.com/kovacsv/assimpjs/main/examples/testfiles/cube_with_materials.obj",
"https://raw.githubusercontent.com/kovacsv/assimpjs/main/examples/testfiles/cube_with_materials.mtl"
],
baseUrl: "https://github.com/kovacsv/assimpjs/raw/main/examples/testfiles/",
scale: 100,
origin: {
latitude: -42.8826,
longitude: 147.3257,
height: 100
},
rectangle: {
west: 147.33,
south: -42.9,
east: 147.33,
north: -42.87
},
id: "some unique id"
}
})
export default class AssImpCatalogItemTraits extends mixTraits(
GltfCatalogItemTraits
) {
Expand Down
21 changes: 12 additions & 9 deletions lib/Traits/TraitsClasses/Cesium3DTilesCatalogItemTraits.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { traitClass } from "../Trait";
import mixTraits from "../mixTraits";
import CatalogMemberTraits from "./CatalogMemberTraits";
import Cesium3DTilesTraits from "./Cesium3dTilesTraits";
Expand All @@ -9,15 +10,17 @@ import ShadowTraits from "./ShadowTraits";
import TransformationTraits from "./TransformationTraits";
import UrlTraits from "./UrlTraits";

/**
* This is a description of the 3D Tiles Catalog Item
* @example
* {
* "type": "3d-tiles",
* "ionAssetId": "1234",
* "name": "My 3D-Tiles dataset"
* }
*/
@traitClass({
description: `Creates a 3d tiles item in the catalog from an ION Asset ID.
<strong>Note:</strong> <i>Instead of specifying <b>ionAssetId</b> property, you can also provide a URL, for example, <code>"url": "https://storage.googleapis.com/vic-datasets-public/1ce41fe7-aed2-4ad3-be4d-c38b715ce9af/v1/tileset.json"</code>.</i>`,
example: {
type: "3d-tiles",
ionAssetId: 69380,
name: "CoM Melbourne 3D Photo Mesh",
id: "some-unique-id"
}
})
export default class Cesium3DTilesCatalogItemTraits extends mixTraits(
SearchableItemTraits,
PlaceEditorTraits,
Expand Down
12 changes: 12 additions & 0 deletions lib/Traits/TraitsClasses/CesiumTerrainCatalogItemTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,19 @@ import MappableTraits from "./MappableTraits";
import mixTraits from "../mixTraits";
import primitiveTrait from "../Decorators/primitiveTrait";
import UrlTraits from "./UrlTraits";
import { traitClass } from "../Trait";

@traitClass({
description: `Creates a Cesium terrain item in the catalog from url.`,
example: {
type: "cesium-terrain",
description:
"This product is a terrain, it provides a representation of the earth's surface with which to apply data in Digital Twin Victoria. The terrain has been generated by transforming Vicmap Elevation digital elevation models (DEMs) into a quantized-mesh terrain tileset. The combined Vicmap elevation extent is embedded in ‘Cesium World Terrain’. These DEMs include ‘Vicmap Elevation DEM 10m’ which provides a base for state-wide coverage. Where available 1m DEMs have been embedded over the ‘Vicmap Elevation DEM 10m’ product.",
url: "https://storage.googleapis.com/vic-datasets-public/85b71982-f5fe-4093-b4e4-fd2e50198fba/v2",
name: "A Vic Terrain",
id: "some-unique-id"
}
})
export default class CesiumTerrainCatalogItemTraits extends mixTraits(
UrlTraits,
MappableTraits,
Expand Down
70 changes: 61 additions & 9 deletions lib/Traits/TraitsClasses/CkanCatalogGroupTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,59 @@ import GroupTraits from "./GroupTraits";
import LegendOwnerTraits from "./LegendOwnerTraits";
import UrlTraits from "./UrlTraits";
import primitiveArrayTrait from "../Decorators/primitiveArrayTrait";
import { traitClass } from "../Trait";

@traitClass({
description: `Creates a group with members from Ckan server.
<strong>Note:</strong>
<br>The following example will</br>
<li>Request datasets of specific types only.</li>
<li>Organise members in subgroups according to their organisations.</li>
<li>For any wms type item, use ESPG:3857 as crs.</li>`,
example: {
url: "https://discover.data.vic.gov.au/",
type: "ckan-group",
name: "DataVic Open Data Portal",
filterQuery: [
{
fq: '+(res_format:(wms OR WMS OR shapefile OR Shapefile OR "zip (shp)" OR shp OR SHP OR kmz OR GeoJSON OR geojson OR csv-geo-au OR aus-geo-csv))'
}
],
groupBy: "organization",
supportedResourceFormats: [
{
id: "WMS",
urlRegex: "^((?!data.gov.au/geoserver).)*$"
},
{
id: "Kml",
onlyUseIfSoleResource: true
},
{
id: "Shapefile",
onlyUseIfSoleResource: true
}
],
ungroupedTitle: "Organisation not declared",
itemPropertiesByType: [
{
type: "wms",
itemProperties: {
crs: "EPSG:3857"
}
}
],
resourceIdTemplate: "{{resource.name}}-{{resource.format}}",
restrictResourceIdTemplateToOrgsWithNames: [
"department-of-energy-environment-climate-action",
"department-of-jobs-skills-industry-regions",
"department-of-transport-and-planning",
"victorian-electoral-commission"
],
id: "some id"
}
})
export default class CkanCatalogGroupTraits extends mixTraits(
GroupTraits,
UrlTraits,
Expand All @@ -19,15 +71,15 @@ export default class CkanCatalogGroupTraits extends mixTraits(
@anyTrait({
name: "Filter Query",
description: `Gets or sets the filter query to pass to CKAN when querying the available data sources and their groups. Each item in the
* array causes an independent request to the CKAN, and the results are concatenated. The
* search string is equivalent to what would be in the parameters segment of the url calling the CKAN search api.
* See the [Solr documentation](http://wiki.apache.org/solr/CommonQueryParameters#fq) for information about filter queries.
* Each item is an object ({ fq: 'res_format:wms' }). For robustness sake, a query string is also allowed. E.g.
* "fq=(res_format:wms OR res_format:WMS)" and "fq=+(res_format%3Awms%20OR%20res_format%3AWMS)" are allowed.
* To get all the datasets with wms resources: [{ fq: 'res_format%3awms' }]
* To get all wms/WMS datasets in the Surface Water group: [{q: 'groups=Surface Water', fq: 'res_format:WMS' }]
* To get both wms and esri-mapService datasets: [{q: 'res_format:WMS'}, {q: 'res_format:"Esri REST"' }]
* To get all datasets with no filter, you can use ['']
array causes an independent request to the CKAN, and the results are concatenated. The
search string is equivalent to what would be in the parameters segment of the url calling the CKAN search api.
See the [Solr documentation](http://wiki.apache.org/solr/CommonQueryParameters#fq) for information about filter queries.
Each item is an object ({ fq: 'res_format:wms' }). For robustness sake, a query string is also allowed. E.g.
"fq=(res_format:wms OR res_format:WMS)" and "fq=+(res_format%3Awms%20OR%20res_format%3AWMS)" are allowed.
<li>To get all the datasets with wms resources: [{ fq: 'res_format%3awms' }]</li>
<li>To get all wms/WMS datasets in the Surface Water group: [{q: 'groups=Surface Water', fq: 'res_format:WMS' }]</li>
<li>To get both wms and esri-mapService datasets: [{q: 'res_format:WMS'}, {q: 'res_format:"Esri REST"' }]</li>
<li>To get all datasets with no filter, you can use ['']</li>
`
})
filterQuery?: (JsonObject | string)[] = [
Expand Down
14 changes: 14 additions & 0 deletions lib/Traits/TraitsClasses/CkanItemReferenceTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,21 @@ import mixTraits from "../mixTraits";
import MappableTraits from "./MappableTraits";
import primitiveTrait from "../Decorators/primitiveTrait";
import UrlTraits from "./UrlTraits";
import { traitClass } from "../Trait";

@traitClass({
description: `Creates a calalog item that references a ckan item.
<strong>Note:</strong>
<li>The property <code>resourceId</code> in the example below is a Ckan resource Id that references a geospatial type (wms) data.</li>`,
example: {
url: "https://discover.data.vic.gov.au",
type: "ckan-item",
resourceId: "22b8cf52-4583-4609-a3da-a6e1805829d9",
name: "A Ckan Item (WMS)",
id: "some id"
}
})
export default class CkanCatalogItemTraits extends mixTraits(
UrlTraits,
MappableTraits,
Expand Down
21 changes: 21 additions & 0 deletions lib/Traits/TraitsClasses/CompositeCatalogItemTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,31 @@ import CatalogMemberFactory from "../../Models/Catalog/CatalogMemberFactory";
import modelReferenceArrayTrait from "../Decorators/modelReferenceArrayTrait";
import mixTraits from "../mixTraits";
import ModelReference from "../ModelReference";
import { traitClass } from "../Trait";
import CatalogMemberTraits from "./CatalogMemberTraits";
import LegendOwnerTraits from "./LegendOwnerTraits";
import MappableTraits from "./MappableTraits";

@traitClass({
description: `Creates one catalog item that combines multiple datasets.`,
example: {
type: "composite",
name: "Combine Multiple Datasets",
id: "some unique ID",
members: [
{
url: "https://portal.spatial.nsw.gov.au/server/rest/services/NSW_Administrative_Boundaries_Theme/MapServer/8",
id: "one unique ID",
type: "esri-mapServer"
},
{
url: "https://tiles.terria.io/static/auspost-locations.csv",
id: "another unique ID",
type: "csv"
}
]
}
})
export default class CompositeCatalogItemTraits extends mixTraits(
MappableTraits,
CatalogMemberTraits,
Expand Down
10 changes: 10 additions & 0 deletions lib/Traits/TraitsClasses/CsvCatalogItemTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import objectTrait from "../Decorators/objectTrait";
import primitiveTrait from "../Decorators/primitiveTrait";
import mixTraits from "../mixTraits";
import ModelTraits from "../ModelTraits";
import { traitClass } from "../Trait";
import AutoRefreshingTraits from "./AutoRefreshingTraits";
import TableTraits from "./Table/TableTraits";
import UrlTraits from "./UrlTraits";
Expand Down Expand Up @@ -31,6 +32,15 @@ class PollingTraits extends ModelTraits {
shouldReplaceData = true;
}

@traitClass({
description: `Creates one catalog item from url that points to a CSV file that contains geospatial data.`,
example: {
type: "csv",
url: "https://tiles.terria.io/static/auspost-locations.csv",
name: "Australia Post Locations",
id: "some unique ID"
}
})
export default class CsvCatalogItemTraits extends mixTraits(
AutoRefreshingTraits,
UrlTraits,
Expand Down
16 changes: 16 additions & 0 deletions lib/Traits/TraitsClasses/CswCatalogGroupTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import objectTrait from "../Decorators/objectTrait";
import primitiveTrait from "../Decorators/primitiveTrait";
import UrlTraits from "./UrlTraits";
import LegendOwnerTraits from "./LegendOwnerTraits";
import { traitClass } from "../Trait";

export type QueryPropertyName =
| "identifier"
Expand Down Expand Up @@ -42,6 +43,21 @@ export class DomainSpecTraits extends ModelTraits {
queryPropertyName?: QueryPropertyName;
}

@traitClass({
description: `Creates one catalog group from url that points to a csw service.
The url in the example supports CORS therefore do not use proxy. Using a proxy might not work.`,
example: {
type: "csw-group",
url: "http://oa-gis.csiro.au/geonetwork/srv/eng/csw",
domainSpecification: {
domainPropertyName: "awavea",
hierarchySeparator: " | ",
queryPropertyName: "subject"
},
name: "Marine Energy Context Layers",
id: "some unique ID"
}
})
export default class CswCatalogGroupTraits extends mixTraits(
GetCapabilitiesTraits,
GroupTraits,
Expand Down
12 changes: 12 additions & 0 deletions lib/Traits/TraitsClasses/CzmlCatalogItemTraits.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { JsonObject } from "../../Core/Json";
import anyTrait from "../Decorators/anyTrait";
import primitiveTrait from "../Decorators/primitiveTrait";
import { traitClass } from "../Trait";
import mixTraits from "../mixTraits";
import AutoRefreshingTraits from "./AutoRefreshingTraits";
import CatalogMemberTraits from "./CatalogMemberTraits";
Expand All @@ -9,6 +10,17 @@ import MappableTraits from "./MappableTraits";
import TimeVaryingTraits from "./TimeVaryingTraits";
import UrlTraits from "./UrlTraits";

@traitClass({
description: `Creates one catalog item from url that points to a czml file.
<strong>Note:</strong> If the model is not visible, try to disable the terrain by unchecking the box "Terrain hides underground features".`,
example: {
type: "czml",
url: "https://tiles.terria.io/terriajs-examples/czml/smooth.czml",
name: "czml example",
id: "some unique ID"
}
})
export default class CzmlCatalogItemTraits extends mixTraits(
AutoRefreshingTraits,
TimeVaryingTraits,
Expand Down
10 changes: 10 additions & 0 deletions lib/Traits/TraitsClasses/GeoJsonCatalogItemTraits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,20 @@ import { JsonObject } from "../../Core/Json";
import anyTrait from "../Decorators/anyTrait";
import objectArrayTrait from "../Decorators/objectArrayTrait";
import primitiveTrait from "../Decorators/primitiveTrait";
import { traitClass } from "../Trait";
import mixTraits from "../mixTraits";
import ApiRequestTraits from "./ApiRequestTraits";
import { GeoJsonTraits } from "./GeoJsonTraits";

@traitClass({
description: `Creates one catalog item from url that points to a geojson file.`,
example: {
type: "geojson",
url: "https://tiles.terria.io/terriajs-examples/geojson/bike_racks.geojson",
name: "geojson example",
id: "some unique ID"
}
})
export default class GeoJsonCatalogItemTraits extends mixTraits(
GeoJsonTraits,
ApiRequestTraits
Expand Down
16 changes: 16 additions & 0 deletions lib/Traits/TraitsClasses/GltfCatalogItemTraits.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
import { traitClass } from "../Trait";
import mixTraits from "../mixTraits";
import AutoRefreshingTraits from "./AutoRefreshingTraits";
import GltfTraits from "./GltfTraits";
import PlaceEditorTraits from "./PlaceEditorTraits";
import UrlTraits from "./UrlTraits";

@traitClass({
description: `Creates one catalog item from url that points to a gltf file.`,
example: {
name: "gltf example",
type: "gltf",
url: "https://tiles.terria.io/terriajs-examples/czml/geelong_mini_demo_bin_linux_v1.0-draft_x64.gltf",
origin: {
longitude: 144.3569,
latitude: -38.14688,
height: -16
},
heightReference: "CLAMP_TO_TERRAIN",
id: "some unique id"
}
})
export default class GltfCatalogItemTraits extends mixTraits(
UrlTraits,
AutoRefreshingTraits,
Expand Down
Loading

0 comments on commit 984f6b8

Please sign in to comment.