在Google Devs看到最近video之后,我决定制作英国的区域地图。本网站上提到了一些可能性,因为我不得不放弃*
所以我最终使用了这个网站(数据下载的示例页面):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();
});
我收到了以上错误:未捕获的InvalidValueError:不是功能或FeatureCollection
谷歌搜索错误后没有任何用处。
我想也许这是野兽的庞大规模所以我使用mapshaper.org将它缩小到一个更易于管理的10K。 仍然没有运气!
也许我的GeoJSON格式错误了?但是怎么可能会考虑在mapit.org上工作,但是我找到了这个用于绘制GeoJSON数据的精彩网站:http://geojsonlint.com/ - linting工作了!显然,GeoJSON工作得非常好,它在英国的所有荣耀中绘制了我的东英吉利亚多边形(注意geojsonlint使用OpenStreetMap)。但仍然没有运气
希望我可以将区域和压缩结合起来,同时我绝望地认为topojson会起作用。我试过 - 我仍然有同样的错误。以下是我在Google云端硬盘上分享的topojson文件的链接:someregions.json 没有运气。
当前的GeoJSON文件启动 {" BBOX":[ - 0.745702,51.448473,1.767999,52.98991]"类型":"的GeometryCollection""几何结构":..
我补充说:
{"type": "Feature", "bbox":[-0.745702,51.448473,1.767999,52.98991],"type":"GeometryCollection","geometries":
重试不同的区域,因为它们不包含开头附近的bbox参数,只是简单地开始 {"输入":"多边形","坐标":[[[-3.155785,53.427385],[ - 3.151533,53.427328],[...
仍然没有运气。
即使我证明我的文件足够小, linted 并且在其他地方工作我在尝试时仍然从控制台获得了那些令人生气的错误消息将它们放在我的地图上。
Uncaught InvalidValueError: not a Feature or FeatureCollection
这是我通过GDrive公开分享的缩小的GeoJSON文件:https://drive.google.com/file/d/0B42Aec8RKcHtNVNZZUxqV0Y5Rkk/edit?usp=sharing
我的下一次尝试将涉及topojson将所有区域压缩成一个带有内部边界的区域但是我想先在这里查看是否有人知道我的问题是什么?因为这可能会浪费另外几个小时的无用能量。
*尝试使用Ordanance Survey数据失败,因为他们提供了SHD数据,而不是之前关于该主题的问题中所述的SHP。所以我无法使用ogr2ogr将其转换为GeoJSON。
答案 0 :(得分:17)
可以在http://geojson.org/geojson-spec.html找到GeoJSON的规范 可以在https://developers.google.com/maps/documentation/javascript/3.exp/reference#Data
找到相关(尽管是实验性的)Google Maps API文档所以看起来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]
]
]
}
}
]
}
由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 **/
}
]
}
答案 1 :(得分:14)
我有同样的问题(或至少相似)并通过引入一个额外的步骤来解决它。
数据来源: 我的语义网络在第一轮请求中以GeoJSON格式提供有关法国南部洞穴的数据。这可以通过以下方式直接导入:
map.data.loadGeoJson(theUrl);
由于我们可能希望独立于语义网络使用这些数据(应用程序是一个胖客户端),因此通过jStorage
本地存储洞穴。
由于循环引用,迭代地图的特征并将这些对象直接存储在jStorage
中失败。
我制作了一个手工制作的例程(不够通用但适合目的)将map.data.Feature
转换为可以存储的javascript对象。
从商店获取数据时:
var cave = $.jStorage.get(key);
map.data.addGeoJson(cave);
抛出Uncaught InvalidValueError: not a Feature or FeatureCollection
错误。
可是:
var geojson = JSON.parse(cave);
map.data.addGeoJson(geojson);
工作正常。
我的解释是函数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}}
答案 2 :(得分:0)
如果您要将数据加载到JavaScript变量,请使用此
var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
var data = map.data.loadGeoJson("GeoJSONfilename.geojson");
googleMap是您希望展示地图的div ID,以及您保存GeoJSON数据的GeoJSONfilename.geojson。
答案 3 :(得分:0)
我有同样的错误,但是问题很简单。在我的GeoJSON上,而不是
"type": "Feature"
我有
"type": "feature"
(注意小写的“ f”)
一旦我解决了这个问题,错误就消失了。