javascript - 嵌套数组正在更改为从 JavaScript 到 Rails 的一串值
问题描述
使用 OpenLayers(虽然我认为这是一个 JS/Rails 问题)我画了一个盒子,
var source = new VectorSource();
function addInteraction() {
var draw = new Draw({
source: source,
type: 'Circle',
geometryFunction: createBox()
});
map.addInteraction(draw);
draw.on('drawend', function(event) {
var boxCoords = event.feature.getGeometry().getCoordinates()
console.log(" boxCoords: ", boxCoords);
document.getElementById('year_snippet_extent').innerHTML = boxCoords;
});
}
addInteraction();
控制台日志输出(矩形的四个角,但又回到开头,OpenLayers就是这样处理画框的,即多边形):
boxCoords:
[Array(5)]
0: Array(5)
0: (2) [977.8497980044467, 710.486212043731]
1: (2) [1341.059647947079, 710.486212043731]
2: (2) [1341.059647947079, 754.3238572469668]
3: (2) [977.8497980044467, 754.3238572469668]
4: (2) [977.8497980044467, 710.486212043731]
将什么写入year_snippet_extent
编辑表单上的字段:977.8497980044467,710.486212043731,1341.059647947079,710.486212043731,1341.059647947079,754.3238572469668,977.8497980044467,754.3238572469668,977.8497980044467,710.486212043731
我想将它作为数组保存到 Postgres。Postgres 数据类型是 text [],Rails 数据类型是相同的,虽然我的迁移是数组,add_column :years, :snippet_extent, :text, array:true
.
编辑中的字段是<%= form.input :snippet_extent, label: 'Automatically filled when snippet is drawn' %>
什么是重新格式化阵列?还是我应该使用不同的方法?
我不知道如何直接box_coords
保存snippet_extent
,所以想出了这个解决方法。我可以解析为我的目的而保存的内容,但我认为我应该能够正确地完成这项工作。
这是我写的以获得我认为正确的格式(我只需要左下角和右上角):
var minx = Math.round(boxCoords.[0].[0].[0])
var miny = Math.round(boxCoords.[0].[0].[1])
var maxx = Math.round(boxCoords.[0].[2].[0])
var maxy = Math.round(boxCoords.[0].[2].[1])
var snippetExtent = "{[[" + String(minx) + "," + String(miny) + "],[" + String(maxx) + "," + String(maxy) + "]]}"
没那么难,但我希望没有必要。我正在四舍五入以使其更易于阅读,并且精度毫无意义。
解决方案
我们正在使用传单,但我们正在做一些非常相似的事情:在绘制几何图形时,我们会显示一个带有表单的模态,并且我们设置一个隐藏的文本字段来包含几何图形。
我们正在使用 postgis,因此我们立即将 geojson 表示存储在该隐藏字段中。不太确定是否可以使用 OpenLayers(很确定是这样,只是没有立即找到它)。但也许这对你来说不是最简单的格式?如果您使用的是 postgis 和 activerecord-postgis gem,则只需将 geojson 分配给几何。
但如果没有,你将不得不自己解析一个geojson(这不是太难,但肯定会稍微复杂一些)。
因此,正如评论中提到的:JSON 是一种更好的交换格式,总是在 API 中使用,因为 JS 和 Rails 都可以很好地处理它。
所以在你的JS中你可以写:
document.getElementById('year_snippet_extent').innerHTML = JSON.stringify(boxCoords);
并且在导轨末端,您可以将其转换回放入其中的任何内容,如下所示:
box_coords = JSON.parse(params[:year_snippet_extent])
推荐阅读
- flutter - Is there a way to trigger onDrag when navigate to other Widget?
- javascript - 开玩笑测试的 React.createElement 问题
- cqrs - 通过网络分发事件
- python - 在python中绘制三个自变量的三元轮廓
- android - 如何在 Kotlin 中获得对数和 ln?
- html - 我的底部导航栏没有显示在移动设备上
- ios - 如何使图像在表格视图中占据两行?
- javascript - 使用 vue.js 在 ace 编辑器中粘贴事件
- python - torchvision.datasets.ImageFolder() 无法加载图像文件
- python - “创建对象”和“初始化”对象有什么区别?