É válido ter um elemento de propriedades em um featureCollection geoJSON?

16

É válido ter um elemento de propriedades com um elemento featureCollection como pai?

Isto é, de acordo com geojson.org válido:

{ "type": "FeatureCollection",
  "features": [
              { "type": "Feature",
                "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
                "properties": {"prop0": "value0"}
              }
              ]
}

Mas não consigo descobrir se é válido nem se é inválido ter isso:

{ "type": "FeatureCollection",
  "properties" : { "description" : "This is the geometry for..." }
  "features": [
              { "type": "Feature",
                "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
                "properties": {"prop0": "value0"}
              }
              ]
}

De acordo com a resposta abaixo, não é válido colocá-lo lá, mas os programas / scripts não saberão o que está lá.

Então, deixe-me reformular a pergunta: (Onde) É possível colocar algumas informações descritivas sobre a propriedade como um total?

stUrb
fonte

Respostas:

10

2.3 Objetos de coleção de recursos

Um objeto GeoJSON com o tipo "FeatureCollection" é um objeto de coleção de recursos.

Um objeto do tipo "FeatureCollection" deve ter um membro com o nome "features". O valor correspondente a "recursos" é uma matriz. Cada elemento na matriz é um objeto de recurso, conforme definido acima.

Eu acho que isso implica claramente que, se o objeto tiver membros adicionais, isso não o tornará inválido.

Objetos Ecmascript são muito abertos.

Portanto, sim, você pode ter um elemento de propriedades no nível superior de uma coleção de recursos, mas não espere que nenhuma ferramenta saiba disso ou copie-a, ...

Julian
fonte
1
OK Bom o suficiente :) Mas qual é o local para armazenar informações sobre a coleção em vez do recurso?
stUrb
Não há um na especificação.
Calvin
Como FeatureCollection é um objeto de primeira classe, qualquer propriedade será sobre a coleção, e não qualquer recurso. Adicione quantas você quiser ou adicione uma propriedade "metadados" cujo valor é um mapa.
Julian
Outra maneira de pensar sobre isso é que você precisa subclassificar FeatureCollection para suas necessidades. Isso é realmente uma metáfora e não uma construção de programação aqui, porque o ECMAscript não pensa nos objetos dessa maneira.
Julian
1
A especificação permite Membros estrangeiros na seção 6.1. tools.ietf.org/html/draft-ietf-geojson-03#section-6 . Portanto, é legal, mas o comportamento depende da aplicação.
Intotecho 16/05/16
9

A resposta curta é não - não é válido ter um propertieselemento em um FeatureCollectionobjeto:

https://tools.ietf.org/html/rfc7946#section-7.1

Os membros "geometry" e "properties" do GeoJSON definem um objeto Feature. Objetos FeatureCollection e Geometry, respectivamente, NÃO DEVEM conter um membro "geometry" ou "properties".

Neil
fonte
Na minha leitura, a redação deste artigo exige que você não possa nomear um membro de um FeatureCollection "properties" como o OP, mas isso não impede que você o chame de algo como "metadata"or "description". Eu usei vários membros de nível superior em mapas da web que dependem do geojson. Boa atualização, @Niel.
Nellnei
1

Eu também acho que as "propriedades" de nível superior seriam úteis, uma no nível da coleção de recursos.

Mas a solução alternativa que fiz foi criar um recurso adicional para a coleção de recursos, preencher as propriedades conforme desejado e definir o objeto de geometria como NULL. Pela minha leitura das especificações, isso parece permitido e permanece dentro do padrão.

Pman
fonte