- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个使用 D3.JS 和 Flask 的项目,试图显示美国 map 。问题是 map 没有显示。我知道 SVG 元素正在附加,json 数据正在通过,但 map 本身没有出现。然后,我尝试创建一个简单的 index.html 文档,并将 json 文件放入该项目中,并使用 Python 简单服务器能够查看 map 。现在来看代码。
首先是 JS 代码:
<script type="text/javascript">
//Define default path generator
let path = d3.geo.path();
//Creating the SVG element and attaching it to the page.
let svg = d3.select("#us-map")
.append("svg")
.attr("width", 900)
.attr("height", 700);
//This function will get the data for the map of the U.S
d3.json("/json", function(json){
console.log(json.features) //This shows an array of 52 objects
//Bind data and create one path per GeoJSON feature
svg.selectAll("path")
.data(json.features)
.enter()
.append("path")
.attr("d", path);
});
</script>
Python 代码:
@app.route("/json")
def json():
data = Data()
data_file = data.convert_json_for_d3()
#return data_file
return data_file.to_json()
我从上面的代码调用的类中的方法:
def convert_json_for_d3(self):
self.__data = pd.read_json('us-states.json')
df = self.__data
return df
HTML:
<section id="us-map">
<h1>UFO Sitings in the U.S.</h1>
</section>
我已经为此工作一天了。起初,让 json 数据与 D3 一起工作是困难的部分。我想我当时就拥有了。然而,正如我所说, map 没有显示。如果我将它与 json 一起放入一个简单的 index.html 文件中,它确实可以工作。所以我想知道问题是否出在 Flask 上?最后一点,我正在遵循《Web 交互式数据可视化》一书中的代码。我从中提取代码的 github 存储库位于:https://github.com/alignedleft/d3-book/blob/master/chapter_12/01_paths.html
使用一个简单的 HTML 文件,数据显示如下:
object {type: "FeatureCollection", features: Array(52)}
features:Array(52)
0:Object
geometry: Object
coordinates: Array(1)
0: Array (33)
0
1
:
1:Object
:
Data in my Flask Project looks like this:
Object {features: Object, type: Object}
features: Object
0: Object
geometry: Object
coordinates: Array(1)
0: Array (33)
0:Array(2)
1: Object
:
所以这两个对象数组几乎是相同的——除了第一行。
感谢您的帮助。
最佳答案
两个问题(基于下面的评论和更新的问题)
其中之一是您的 Flask 项目中的 geojson 无效。例如,功能应该是一个数组 - 而不是一个对象,类型仍然应该是 featureCollection (这将在下面的评论中讨论)。在此过程中,您的 geojson 结构被更改为 d3.geo.path() 不接受的有效 geojson 结构。
两个是您没有使用投影将纬度和经度对(在每个要素的几何形状中)转换为 svg 坐标空间。
第二期:
使用d3.geo.path();
时,您需要指定投影(例如:d3.geo.path().projection(d3.geo.mercator()) ;
)。如果您不提供投影,则使用空投影。这会解释提供的 geojson 而不应用任何转换 - 本质上您的值被转换为 svg 上的像素值。
美国位于西半球,因此所有经度均为负(并且随着北南地理值随着向北移动而增加,svg
y 值随着向下移动而增加,图像将是颠倒的)。空投影(svg
上没有其他变换)将绘制一条位于 svg
边界左侧的路径。这就是为什么会发生这三件事:
您引用的章节中引用的 geojson 是未投影的数据 - 它包含每个顶点的纬度和经度对:[-133.05341,56.125739]
。这是理想的,因为 d3.geo.projection 采用这种类型的坐标,三维椭球上的点,并将它们投影到二维笛卡尔平面上。 如果您已有平面数据,则需要使用地理变换。
因此,为了可视化您的数据,您需要选择一个投影来将纬度和经度对转换为适当的值。 USA albers 可能是最简单的,因为它是一个复合投影,可以缩小阿拉斯加并使阿拉斯加和夏威夷更靠近美国大陆。 Albers USA 还设置了所有投影参数以显示美国,而无需修改投影参数(中心、旋转、平行线、比例等),而其他投影则需要设置适当的参数。
我使用以下代码通过 albersUsa 投影显示您的数据:
var projection = d3.geo.albersUsa().translate([width/2,height/2]);
var path = d3.geo.path().projection(projection);
d3.json("us.json",function(data) {
svg.append("path")
.datum(data)
.attr('d',path)
.attr('fill','steelblue')
.attr('stroke','black');
});
Here 是一个工作演示和屏幕截图:
如果您的 map 对于 svg 来说太大(反之亦然),您可以使用projection.scale(n) 设置比例,较小的数字缩小,较大的数字放大。
关于javascript - D3.JS 和 Flask 的问题 - 试图获取美国 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44290931/
我正在尝试从一个 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 map 的 m
我是 Haskell 的新手,我认为函数 map map和 map.map在 Haskell 中是一样的。 我的终端给了我两种不同的类型, (map.map) :: (a -> b) -> [[a]
我的目标是创建一个 map 的 map ,这样我就可以通过它的键检索外部 map 的信息,然后通过它们的键访问它的“内部” map 。 但是,当我得到每个内部映射时,我最初创建的映射变成了一个对象,我
如何使用 Java8 编写以下代码? for (Entry> entry : data.entrySet()) { Map value = entry.getValue(); if (valu
我有覆盖整个南非的图片。它们为Tiff格式,并已将坐标嵌入其中。我正在尝试拍摄这些图像(大约20张图像),并将它们用作我的iPhone应用程序中的地图叠加层。我的问题在于(准确地)将地图切成图块。 我
所以我有 2 std::map s >一个是“旧的”,一个是“新的”,我想知道哪些文件被删除了,这样就能够遍历差异并对 shared_ptr 做一些事情。这样的事情可能吗?如何做到? 最佳答案 虽然
是否可以将当前查看的 google.maps.Map 转换为静态图像链接,以便我可以获取图像并将其嵌入到 PDF 中? 我在 map 上添加了一些带有自定义图标的标记,所以我不确定这是否真的可行。 如
你能帮我吗 Java Streams ? 从标题可以看出我需要合并List>>进入Map> . 列表表示为List>>看起来像: [ { "USER_1":{
对于 idAndTags 的第二个条目,内部映射被打乱,但第一个条目则不然 第一次接近! for (Map.Entry> entryOne : idAndTags.entrySet()) {
我将从我的代码开始,因为它应该更容易理解我想要做什么: @function get-color($color, $lightness) { @return map-get(map-get($col
我过去曾在许多网站上使用过 Google map ,但遇到了以前从未遇到过的问题。 map 窗口正在显示,但它只显示左上角的 map 片段,以及之后的任何内容(即使我在周围导航时),右侧也不会加载任何
众所周知,这些 map ,无论是常规街道 map 还是卫星 map ,在中国的特定地区都无法正确排列。那么哪个 map 排列正确,是卫星 map 还是默认街道 map ?一些网站表明卫星 map 是正
在拖尾事件之后,我面临着获取此处 map 中的 map 边界的问题。我需要新的经纬度来在新更改的视口(viewport)中获取一些项目/点。我只是想在拖动结束时获得谷歌地图map.getBounds(
我想做的是通过 ajax API 显示以英国邮政编码为中心的小型 bing 生成 map 。我相信这是可能的;我在 Bing map 文档中找不到如何将英国邮政编码转换为可以插入 map Ajax 控
我有一个 List我想转换成的 e Map>其中外部字符串应为“Name”,内部字符串应为“Domain”。 Name Id Domain e(0) - Emp1, 1, Insuran
我的第 2 部分:https://stackoverflow.com/questions/21780627/c-map-of-maps-typedef-doubts-queries 然后我继续创建 I
是否可以在 1 行中使用 Java8 编写以下所有 null 和空字符串检查? Map> data = new HashMap<>(holdings.rowMap()); Set>> entrySet
我正在审查一个项目的旧代码,并使用 Map 的 Map 的 Map 获得了如下数据结构(3 层 map ): // data structure Map>>> tagTree
这可能是一种不好的做法,但我还没有找到更好的解决方案来解决我的问题。所以我有这张 map // Map>> private Map>> properties; 我想初始化它,这样我就不会得到 Null
我们在 JDK 1.7 中使用 HashMap,我在使用 SonarQube 进行代码审查时遇到了一些问题。 请考虑以下示例: public class SerializationTest imple
我是一名优秀的程序员,十分优秀!