Ограничить схему JSON полигоном из GeoJson - PullRequest
0 голосов
/ 18 января 2019

Я строю схему JSON со свойством boundary. Я ссылаюсь на схему GeoJson, которая работает нормально. Теперь я хочу ограничить мою границу типом Polygon, который является enum из схемы GeoJson.

Как это сделать?

Это соответствующая часть моей схемы:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "plot": {
      "type": "object",
      "properties": {
        "boundary": {
          "description": "The boundary of the plot",
          "title": "Plot boundary",
          "additionalProperties": false,
          "required": [
            "type",
            "coordinates",
            "crs"
          ],
          "TODO": "Restrict to (multi)polygons only.",
          "$ref": "http://json.schemastore.org/geojson"
        }      
      }
    }
  }
}

Это мой проверяющий JSON:

{
  "plot":
  {
    "boundary": {
      "crs": {
        "type": "name",
        "properties": {
          "name": "EPSG:3857"
        }
      },
      "coordinates": [],
      "type": "MultiPolygon"
    }    
  }
}

1 Ответ

0 голосов
/ 01 февраля 2019

Кажется, я использовал неправильный геойсон. Я изменил свой код, и теперь он работает, как и ожидалось, и новые схемы также имеют черновик-7. Вот мой обновленный код:

        "boundary": {
          "title": "The boundary of the plot",
          "anyOf": [
            {
              "$ref": "http://geojson.org/schema/MultiPolygon.json"
            },
            {
              "$ref": "http://geojson.org/schema/Polygon.json"
            }
          ],
          "additionalProperties": false

и

            "geoLocation": {
              "title": "Front door geolocation",
              "$ref": "http://geojson.org/schema/Point.json",
              "additionalProperties": false
            },

JSON может быть:

  "boundary":
  {
    "type": "Polygon",
    "coordinates": [
      [
        [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0],
        [100.0, 0.0]
      ]
    ]
  }

и

    "geoLocation": {
      "coordinates": [125.25, 135.255],
      "type": "Point"
    }
...