我对制图和Altair / Vega非常陌生。Altair文档中有一个示例,说明如何制作以美国各州的轮廓开始的地图,该地图的创建基本上是这样的:
states = alt.topo_feature(data.us_10m.url, feature='states')
# US states background
background = alt.Chart(states).mark_geoshape(
fill='lightgray',
stroke='white'
)
但我想在不列颠群岛上绘制点。由于vega数据集中只有美国和世界地图,因此我必须创建自己的GeoJSON,不是吗?
因此,我尝试通过运行此博客文章中的一些命令行命令从世界地图上获取不列颠群岛的GeoJSON
,即,
ogr2ogr -f GeoJSON -where "adm0_a3 IN ('GBR','IRL','IMN','GGY','JEY','GBA')" subunits.json ne_10m_admin_0_map_subunits/ne_10m_admin_0_map_subunits.shp
这似乎已经创建了一个GeoJSON文件subunits.json,它可能代表不列颠群岛。但是我怎样才能把它带入Altair?还是有另一种使用Altair制作不列颠群岛地图的方法?
您引用的示例在使用topojson
结构化数据时使用结构geojson
化数据。因此,您可能需要:
# remote geojson data object
url_geojson = 'https://raw.githubusercontent.com/mattijn/datasets/master/two_polygons.geo.json'
data_geojson_remote = alt.Data(url=url_geojson, format=alt.DataFormat(property='features',type='json'))
# chart object
alt.Chart(data_geojson_remote).mark_geoshape(
).encode(
color="properties.name:N"
).properties(
projection={'type': 'identity', 'reflectY': True}
)
欲了解更多信息,请继续阅读
更新 :由于直接支持Altair版本3.3.0,因此支持GeoDataFrame(geopandas)。支持的所有对象也是如此__geo_interface__
。
下面讨论了变体:
geojson
和topojson
结构化的json
文件,并在牛郎星它们的用法import geojson
import topojson
import pprint
import altair as alt
我们首先创建一个包含两个要素的集合,即两个相邻的多边形。
我们将以GeoJSON数据格式创建的两个多边形的示例:
feature_1 = geojson.Feature(
geometry=geojson.Polygon([[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]),
properties={"name":"abc"}
)
feature_2 = geojson.Feature(
geometry=geojson.Polygon([[[1, 0], [2, 0], [2, 1], [1, 1], [1, 0]]]),
properties={"name":"def"}
)
var_geojson = geojson.FeatureCollection([feature_1, feature_2])
通过漂亮地打印变量来检查创建的GeoJSON var_geojson
pprint.pprint(var_geojson)
{'features': [{'geometry': {'coordinates': [[[0, 0],
[1, 0],
[1, 1],
[0, 1],
[0, 0]]],
'type': 'Polygon'},
'properties': {'name': 'abc'},
'type': 'Feature'},
{'geometry': {'coordinates': [[[1, 0],
[2, 0],
[2, 1],
[1, 1],
[1, 0]]],
'type': 'Polygon'},
'properties': {'name': 'def'},
'type': 'Feature'}],
'type': 'FeatureCollection'}
可以看出,这两个Polygon
Features
嵌套在features
对象中,并且geometry
是每个的一部分feature
。
Altair能够json
使用中的property
键来解析嵌套对象format
。以下是此类示例:
# inline geojson data object
data_geojson = alt.InlineData(values=var_geojson, format=alt.DataFormat(property='features',type='json'))
# chart object
alt.Chart(data_geojson).mark_geoshape(
).encode(
color="properties.name:N"
).properties(
projection={'type': 'identity', 'reflectY': True}
)
TopoJSON是GeoJSON的,其中所述的延伸geometry
的features
是从命名为顶层对象称为arcs
。这样就可以在几何图形上应用哈希函数,因此每个共享arc
仅应存储一次。
我们可以将var_geojson
变量转换为topojson
文件格式结构:
var_topojson = topojson.Topology(var_geojson, prequantize=False).to_json()
var_topojson
{'arcs': [[[1.0, 1.0], [0.0, 1.0], [0.0, 0.0], [1.0, 0.0]],
[[1.0, 0.0], [2.0, 0.0], [2.0, 1.0], [1.0, 1.0]],
[[1.0, 1.0], [1.0, 0.0]]],
'objects': {'data': {'geometries': [{'arcs': [[-3, 0]],
'properties': {'name': 'abc'},
'type': 'Polygon'},
{'arcs': [[1, 2]],
'properties': {'name': 'def'},
'type': 'Polygon'}],
'type': 'GeometryCollection'}},
'type': 'Topology'}
现在,嵌套geometry
对象被替换,arcs
并按索引引用到顶级arcs
对象。FeatureCollection
现在我们可以拥有多个objects
,而不是只有一个,我们转换FeatureCollection
后的结果data
以a形式存储在密钥中GeometryCollection
。
注意:键名data
是任意的,并且在每个数据集中都不同。
Altair能够使用其中的键来解析格式化结构中的嵌套data
对象,同时声明它是一个。以下是此类示例:topojson``feature``format``topojson
type
# inline topojson data object
data_topojson = alt.InlineData(values=var_topojson, format=alt.DataFormat(feature='data',type='topojson'))
# chart object
alt.Chart(data_topojson).mark_geoshape(
).encode(
color="properties.name:N"
).properties(
projection={'type': 'identity', 'reflectY': True}
)
topojson
如果可以通过URL访问该文件,则还存在一种从文件中提取对象的快捷方式:
alt.topo_feature(url, feature)
topojson
通过网址引用文件的Altair示例
# remote topojson data object
url_topojson = 'https://raw.githubusercontent.com/mattijn/datasets/master/two_polygons.topo.json'
data_topojson_remote = alt.topo_feature(url=url_topojson, feature='data')
# chart object
alt.Chart(data_topojson_remote).mark_geoshape(
).encode(
color="properties.name:N"
).properties(
projection={'type': 'identity', 'reflectY': True}
)
但是对于geojson
可通过URL访问的文件,没有这样的简写,应按以下方式链接:
alt.Data(url, format)
geojson
通过网址引用文件的Altair示例
# remote geojson data object
url_geojson = 'https://raw.githubusercontent.com/mattijn/datasets/master/two_polygons.geo.json'
data_geojson_remote = alt.Data(url=url_geojson, format=alt.DataFormat(property='features',type='json'))
# chart object
alt.Chart(data_geojson_remote).mark_geoshape(
).encode(
color="properties.name:N"
).properties(
projection={'type': 'identity', 'reflectY': True}
)
问题内容: 我正在尝试在Python的大草坪地图中显示以下geojson文件,但它仅显示一个空地图,没有任何数据。 这是我尝试的步骤: 我尝试使用下面的python代码,但未显示任何内容。 我使用相同的代码在下面的github存储库中尝试了其他geojson文件,并且数据显示没有问题,所以看起来我的python代码很好 我在github和Mapshaper中打开了“ census_tracts_2
我正在尝试使用GeoJSON在地图上绘制点。我阅读了文件,其中说明: 可以通过调用数据对象的loadGeoJSON()方法来加载和显示GeoJSON文件 (https://developers.google.com/maps/documentation/javascript/datalayer) 但是,同一页上的示例代码显示: map.data.loadGeoJson(…) 因此,我使用代码示例,
问题内容: 可以应用于以上以及以下内容: 日期时间对象上的Django F表达式 当然,我也很高兴看到任何其他方法!! 题: Django / GeoDjango有一些类似或可以这样使用的数据库函数: 有什么方法可以基于现有的数据库功能使用和/或创建自己的自定义数据库功能,例如: (MySQL) (SQLite) (带有PostGIS的PostgreSQL) 如何在Django / GeoDjan
SuperMap Online云应用为您提供多种在线WebApp,您仅需注册并登录您的SuperMap Online账户,即可使用这些WebApp制作地图和分析数据,您也可以将制作完成的地图分享给他人。您可以: 利用数据上图制作地图 利用地图大屏搭建数据可视化应用 利用数据洞察挖掘您的数据价值 利用地图工作室进行海量数据可视化和分析 利用三维地球创建三维场景 本例将带领您:在云应用——数据上图中快
本文向大家介绍如何在R中制作数据帧列表?,包括了如何在R中制作数据帧列表?的使用技巧和注意事项,需要的朋友参考一下 这可以通过使用列表功能来完成。 示例 创建上述数据帧的列表-
我是React Native的新手,但我想做的是移植到我的反应应用程序上,该应用程序以地图为中心。通常情况下,我可以直接加载Geojson文件到谷歌地图的数据层,但是我如何在反应本地地图中做到这一点呢?另外,每当Geojson被加载时,我可以附加一个事件监听器,当你点击该区域时触发一些东西,这是如何在RN中完成的。(下面的反应代码) 我尝试过使用(多边形),但Geojson中的坐标格式彼此之间并不
问题内容: 这是一个自我回答的帖子。为什么?因为缺少数据样本,所以Power BI中的许多问题都无法回答。另外,许多人似乎想知道如何使用Python在Power BI中编辑数据表。当然,全世界都需要Power BI中Python的更广泛使用。有人认为您必须将Python代码段应用于其他位置加载的现有表。我对本文的回答将向您展示如何在原本为空的Power BI文件中用几行代码构建一个(相当大的)数据
我正在制作一个交互式世界地图可视化,用户应该能够放大一个国家,然后看到该国的更多细节(例如,如果该国是美国)。 到目前为止,我有一个geoJSON文件用于世界各国的数据,另一个用于中国各省的数据。问题是我需要把中国省的地图放在中国在世界地图上的地方。尽管两张地图的中国边界形状是一样的,但缩放不一样,这也是中国地图翻译的一个问题。 最终结果应该类似于以下内容:http://techslides.co