嵌套数组正在更改为从 JavaScript 到 Rails 的值字符串
A nested array is changing to a string of values going from JavaScript to 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();
控制台日志输出(矩形的四个角,但是returns到开头,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 数据类型是文本 [],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);
并且在 rails 结束时,您可以将其转换回放入其中的任何内容,如下所示:
box_coords = JSON.parse(params[:year_snippet_extent])
使用 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();
控制台日志输出(矩形的四个角,但是returns到开头,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 数据类型是文本 [],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);
并且在 rails 结束时,您可以将其转换回放入其中的任何内容,如下所示:
box_coords = JSON.parse(params[:year_snippet_extent])