1、GeoJSON是什么?
GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法的地理空间信息数据交换格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。
2、GeoJSON的数据结构是什么?
一个完整的GeoJSON数据结构总是一个(JSON术语里的)对象。在GeoJSON里,对象由名/值对--也称作成员的集合组成。对每个成员来说,名字总是字符串。成员的值要么是字符串、数字、对象、数组,要么是下面文本常量中的一个:"true","false"和"null"。数组是由值是上面所说的元素组成。GeoJSON总是由一个单独的对象组成。这个对象(指的是下面的GeoJSON对象)表示几何、特征或者特征集合。
(1)GeoJSON对象可能有任何数目成员(名/值对)。
(2)GeoJSON对象必须有一个名字为"type"的成员。这个成员的值是由GeoJSON对象的类型所确定的字符串。
(3)type成员的值必须是下面之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Feature", 或者 "FeatureCollection"。
(4)GeoJSON对象可能有一个可选的"crs"成员,它的值必须是一个坐标参考系统的对象。
(5)GeoJSON对象可能有一个"bbox"成员,它的值必须是边界框数组。
数据示例如下:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
113.31000566482544,
23.120400299789445
],
[
113.31287026405334,
23.120400299789445
],
[
113.31287026405334,
23.121140331350293
],
[
113.31000566482544,
23.121140331350293
],
[
113.31000566482544,
23.120400299789445
]
]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "LineString",
"coordinates": [
[
113.31015586853026,
23.12181128977129
],
[
113.31278443336487,
23.121771821721737
]
]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [
113.31148624420166,
23.12290652351527
]
}
}
]
}
3、在arcgis api js中如何使用GeoJSON格式数据?
那直接引用这份示例数据在地图上展示吧,效果如下:
//实例化ArcGISGeojsonLayer对象,进行参数构造初始化
var geojsonLayer = new ArcGISGeojsonLayer({
"url": "data/map.geojson"
});
//将geojsonLayer 图层添加到map
map.addLayer(geojsonLayer);
//当图层加载完毕之后,设置当前地图的范围为geojsonLayer图层的范围
geojsonLayer.on("update-end", function(e) {
map.setExtent(e.target.extent.expand(1.2));
});
4、扩展接口ArcGISGeojsonLayer
该接口是自定义封装了一个接口,已经整合到arcgis api js中,和其他图层对象的调用方式是一样的,我们可以在代码中打印 geojsonLayer对象,看看该图层会有哪些属性、方法、事件。
4.1 构造初始化
new ArcGISGeojsonLayer({})
4.1.1 三种加载方式
参数名 | 描述 | ||
url | String | 文件或服务器路径,服务器必须在同一个域或启用CORS,或使用代理。 | |
data | Object[] | Optional | FeatureCollection,如果同时使用data和url,data会覆盖url。 |
maxdraw | Number | Optional | 最大绘制的图形数,默认为1000。 |
4.2 属性:extent
控制台输出结果如下,表示为当前图层的范围,坐标系为4326
extent:{
cache: undefined
spatialReference: {wkid: 4326}
xmax: 113.31287026405334
xmin: 113.31000566482544
ymax: 23.12290652351527
ymin: 23.120400299789445
}
4.3 属性:graphics
控制台输出结果如下:表示该图层中有3个元素,分别为刚刚我们看到到点、线、面。
4.4 属性:infoTemplate
该属性为图层.graphics元素的模板弹窗,infoTemplate有两个属性:title和content,我这里暂未设置,可自定义通过${属性}显示 属性对应的值,效果如下:
4.5 事件
本来是打算整理出一份属性、函数、事件的表格。但是通过F12打印图层对象可以见到所有的属性、函数、事件等... 该图层对象还有其他的渲染扩展等....