代码之家  ›  专栏  ›  技术社区  ›  Paul Meems

限制json模式为geojson中的多边形

  •  0
  • Paul Meems  · 技术社区  · 6 年前

    我正在构建一个具有属性的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 回复  |  直到 5 年前
        1
  •  0
  •   Paul Meems    5 年前

    我好像用错了geojson。 我修改了我的代码,现在它按预期工作,新的模式也是draft-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"
        }