Клуб API Карт

ymaps.geoQuery(json) перестал обрабатывать валидный geojson

mail@gmelikov.ru
17 ноября 2017, 12:39

Спецификации geojson позволяют внутри объекта geometry иметь "type":"GeometryCollection",

      {
         "type":"Feature",
         "geometry":{
            "type":"GeometryCollection",
...

3 месяца назад ymaps отлично обрабатывали такой geojson, но с определённого момента начали выдаваться ошибки: "TypeError: WeakMap key must be an object, got null", при дебаге: "Error: domEvent.Manager: Не был передан обязательный аргумент!."

Такой geojson является валидным по спецификации, https://tools.ietf.org/html/rfc7946

Воспроизведение: https://jsfiddle.net/brLj2cfh/

Намеренное ли это действие, или регрессия?

6 комментариев
mari-na-bzzz
Сотрудник Яндекса20 ноября 2017, 12:59
Добрый день, к сожалению, это намеренное действие. API гарантирует поддержку только той функциональности, которая есть в публичной документации. Поддержка geometry: GeometryCollection была экспериментальной функциональностью, не описанной в документации, в данный момент ее поддержка прекращена.
mari-na-bzzz,
 GeometryCollection  является частью стандарта GeoJSON, по правилам хорошего тона вы должны реализовать весь стандарт, либо четко довести что у вас кастрированный "yaGeoJSON".
mari-na-bzzz
Сотрудник Яндекса20 ноября 2017, 14:43
kosilka75,
мы напишем более явно, что не поддерживаем geoJSON в полном объеме, чтобы не было в будущем таких недоразумений
mari-na-bzzz,
она описана в стандарте,
https://tools.ietf.org/html/rfc7946#section-3.2 - "A Feature object has a member with the name "geometry". The value
of the geometry member SHALL be either a Geometry object as
defined above or, in the case that the Feature is unlocated, a
JSON null value."
https://tools.ietf.org/html/rfc7946#section-3.1.8 - "A GeoJSON object with type "GeometryCollection" is a Geometry object."
Можете уточнить, вы ссылаетесь на этот стандарт? В нём эта функциональность описана.
mari-na-bzzz
Сотрудник Яндекса20 ноября 2017, 14:45
mail@gmelikov.ru,
мы никогда не поддерживали стандарт GeoJson в полном объеме, я ссылаюсь на документацию исключительно js api карт.
Если кому-то понадобится - набросал функцию для конвертации geojson из примера в формат, читаемый яндекс картами:


function convertGeoJsonToYmapsJson(v) {
var out = {
type: 'FeatureCollection',
features: []
};
v.geometry.geometries.forEach(function(item, i, arr) {
out.features.push({
type: 'Feature',
geometry: item,
properties: v.properties,
options: v.options
});
});
return out;
}