Uncaught InvalidValueError:不是Feature或FeatureCollection

Rus*_*uff 9 maps google-maps geojson google-maps-api-3

在看了Google Devs 的最新视频后,我决定制作一张英国的区域地图.在这个网站上提到的一些可能性,我已经不得不解雇*

所以我最终使用这个网站(数据下载的示例页面):http://mapit.mysociety.org/area/11804.html

注意GeoJSON下载作为第三个链接下来?它的文件大小约为1Mb.当我第一次尝试将它与我的地图一起使用时:

function initMap(){
    var ukc = new google.maps.LatLng(54.8, -4.6);
    var mapOptions = {
        zoom: 5,
        center: ukc
    };
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    map.data.loadGeoJson('http://local.mapsite.com:8080/app/jsondata/eastern.json');
}

$(document).ready(function(){
    initMap();
});
Run Code Online (Sandbox Code Playgroud)

我收到了上述错误:Uncaught InvalidValueError:不是Feature或FeatureCollection

修复尝试1 - 谷歌它

谷歌搜索错误回来没有任何用处.

修复尝试2 - 收缩它

我想也许这是野兽的庞大规模所以我使用mapshaper.org将它缩小到一个更易于管理的10K.仍然没有运气!

修复尝试3 - Lint it

也许我的GeoJSON格式错误了?但是怎么可能会考虑在mapit.org上工作,但是我找到了这个用于绘制GeoJSON数据的精彩网站:http://geojsonlint.com/ - linting有效!显然,GeoJSON工作得非常好,它在英国的所有荣耀中绘制了我的东英吉利亚多边形(注意geojsonlint使用OpenStreetMap).但仍然没有运气

修复尝试4 - TopoJson

希望我可以结合区域并压缩,同时我绝望地认为topojson会起作用.我试过 - 我仍然有同样的错误.这是我在Google云端硬盘上分享的topojson文件的链接:someregions.json 没有运气.

修复尝试5 - 添加功能代码以启动JSON

当前的GeoJSON文件启动{"bbox":[ - 0.745702,51.448473,1.767999,52.98991],"type":"GeometryCollection","geometry":...

我补充说:

{"type": "Feature", "bbox":[-0.745702,51.448473,1.767999,52.98991],"type":"GeometryCollection","geometries":
Run Code Online (Sandbox Code Playgroud)

修复尝试6

重试不同的区域,因为它们不包含开头附近的bbox参数,只需启动{"type":"Polygon","coordinates":[[[ - 3.155585,53.427385],[ - 3.151533,53.427328],[.. .

仍然没有运气.

在(失败)结论中

即使我证明我的文件足够小,在其他地方使用lint并且工作,但在尝试将它们放在我的地图上时,我仍然从控制台获得了那些令人愤怒的错误消息.

Uncaught InvalidValueError: not a Feature or FeatureCollection
Run Code Online (Sandbox Code Playgroud)

这是我通过GDrive公开共享的缩小的GeoJSON文件:https://drive.google.com/file/d/0B42Aec8RKcHtNVNZZUxqV0Y5Rkk/edit usp = sharing

我的下一次尝试将涉及topojson将所有区域压缩成一个带有内部边界的区域,但我想先在这里查看是否有人知道我的问题是什么?因为那可能是浪费了几个小时无用的能量.

*尝试使用Ordanance Survey数据失败,因为他们提供了SHD数据,而不是之前关于该主题的问题中所述的SHP.所以我无法使用ogr2​​ogr将其转换为GeoJSON.

Dr.*_*lle 17

可以在http://geojson.org/geojson-spec.html找到GeoJSON的规范.可以 在https://developers.google.com/maps/documentation/javascript/找到相关的(尽管是实验性的)Google Maps API文档.3.exp /参考#数据

因此,Google地图似乎可以接受GeoJSON,您需要在Feature或FeatureCollection中包装MapIt返回的Polygon(或类似),这是bermuda-triangle的示例:

  { "type": "FeatureCollection",
    "features": [
      { "type": "Feature",
         "geometry": {
           "type": "Polygon",
           "coordinates": 
              [
                [
                  [-80.190262,25.774252],
                  [-66.118292,18.466465],
                  [-64.75737,32.321384],
                  [-80.190262,25.774252]
                ]
              ]
         }
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)

对于http://mapit.mysociety.org/area/11804.html提供的数据,它必须是:

  { "type": "FeatureCollection",
    "features": [
      { "type": "Feature",
         "geometry": /** paste here the complete output of 
                         http://mapit.mysociety.org/area/11804.geojson **/
      }
    ]
  }
Run Code Online (Sandbox Code Playgroud)


Ron*_*ell 14

我有同样的问题(或至少相似),并通过引入一个额外的步骤解决它.

数据来源:我的语义网络在第一轮请求提供有关GeoJSON格式的法国南部洞穴的数据.这通过以下方式直接导入:

map.data.loadGeoJson(theUrl);

由于我们可能希望独立于语义网络使用这些数据(应用程序是一个胖客户端),因此通过本地存储洞穴jStorage.jStorage由于循环引用,迭代地图的特征并直接存储这些对象失败.我制作了一个手工制作的例程(不够通用但适合目的)将其转换map.data.Feature为可以存储的javascript对象.

从商店获取数据时:

var cave =  $.jStorage.get(key);
map.data.addGeoJson(cave); 
Run Code Online (Sandbox Code Playgroud)

抛出Uncaught InvalidValueError: not a Feature or FeatureCollection错误.

但:

var geojson = JSON.parse(cave);
map.data.addGeoJson(geojson);
Run Code Online (Sandbox Code Playgroud)

工作良好.

我的解释是该函数addGeoJson需要一个javascript对象而不是一个字符串.

示例geoJson(orignal"cave")值:

{ "type": "Feature", "geometry": {"type": "Point", "coordinates": [5.368743302306143, 44.0421921072459]},"id": "84.MON.014", "properties": {"nom": "Aven du Grand Guérin", "nid": "7b4703-f387f6f544-0750e59f441be7bb30a7e097c5d725f7", "nature": "Aven", "nodeTime": 1400743203325, "dataId": "5b66137c-1461fdfe5ca-f528764d624db129b32c21fbca0cb8d6", "status": 1}} 
Run Code Online (Sandbox Code Playgroud)

  • 这个答案解决了今晚让我疯狂的原因。在阅读Google Maps API时,它说addGeoJson函数需要一个PARSED对象https://developers.google.com/maps/documentation/javascript/reference#Data (2认同)