MapKit JS 如何从变量中分配 mapkit.Coordinates() 作为数字
MapKit JS how to assign mapkit.Coordinates() from variable as digit
我在 Filemaker 中使用 MapKit JS,可以像这样从 Filemaker Web View 中的输入获取坐标。
"const punkt = '" & Substitute ( MYMAP::longlat ; ¶ ; ", " ) & "';" & ¶ &
输入例如:59.436549, 10.629371 但我无法将其纳入 mapkit 定义。我得到纬度和经度值并确保它是一个数字。但是我需要逗号 (,).
var punkt // this is 59.658985, 10.790869
var punktxy = punkt.split(",");
var x = parseFloat(punktxy[0]);
var x = parseFloat(punktxy[1);
当我对它进行硬编码时:
new mapkit.Coordinate(59.658985, 10.790869)
但是我做错了。可能是因为当我像这样连接它时它是类型文本:
new mapkit.Coordinate(x + ',' + y)
这也不行:
new mapkit.Coordinate(x,y)
大概是字符串?我如何获得正确的值?这可能是一个 javascript 基本问题,但我在这里迷路了。
这是我的网络查看器代码,其中包含来自文本字段的 javascript。请注意,我将 x 和 y 值放入 javascript。这就是为什么我需要 3 个 js 文件,因为我似乎无法正确处理:mapkit.Coordinate(59.658985, 10.790869)
网络查看器:
// Load your specific implementation of MapKit JS ""; "const
punkt = '" & Substitute ( ARTSFUNN::Lokalitet ; ¶ ; ", " ) & "';" & ¶
& GetLayoutObjectAttribute ( "map1.js" ; "content" ) & ARTSFUNN::Lat
& " , " & ARTSFUNN::Long & GetLayoutObjectAttribute ( "map2.js" ;
"content" ) & ARTSFUNN::Lat & " , " & ARTSFUNN::Long &
GetLayoutObjectAttribute ( "map3.js" ; "content" ); "";
map1.js:
mapkit.init({
authorizationCallback: done => {
done(
"<<$$JWT.TOKEN>>"
);
}
});
var punktxy = punkt.split(",");
var x = parseFloat(punktxy[0]);
var x = parseFloat(punktxy[1);
var xy = (x + ','+ y); // doesn't work
var MarkerAnnotation = mapkit.MarkerAnnotation,
clickAnnotation;
var borch = new mapkit.CoordinateRegion(
new mapkit.Coordinate(
map2.js:
),
new mapkit.CoordinateSpan(0.005, 0.005)
);
var map = new mapkit.Map('map');
map.region = borch;
map.mapType = "hybrid";
map.setCenterAnimated(new mapkit.Coordinate(
map3.js:
), true);
console.log(map);
更新## - 刚刚测试,现在这似乎有效!
在 WebViewer 中定义纬度和经度:
"var x = '" & Substitute ( ARTSFUNN::Lat ; ¶ ; ", " ) & "';" & ¶ &
"var y = '" & Substitute ( ARTSFUNN::Long ; ¶ ; ", " ) & "';" & ¶ &
使用包含 map.js:
中的值
var x = parseFloat(x);
var y = parseFloat(y);
// does not work if I don't convert to digit before use!
var bor = new mapkit.CoordinateRegion(
new mapkit.Coordinate(x,y),
new mapkit.CoordinateSpan(0.005, 0.005)
);
var map = new mapkit.Map('map');
map.region = bor;
map.mapType = "hybrid";
map.setCenterAnimated(new mapkit.Coordinate(x,y), true);
这不是真正的答案(除非你的问题纯粹是关于 "as digit" 部分),但我不能 post 在评论中写这么多代码。
在你的问题开头,你使用了一个名为 MYMAP::longlat
的字段,它显然包含两个由回车 return 分隔的坐标。您使用 Substitute()
将 return 替换为逗号。
现在您正在使用两个单独的字段,ARTSFUNN::Lat
和 ARTSFUNN::Lon
- 但您仍然对两者应用相同的 Substitute
操作。这似乎没有必要。
更重要的是,您正在做:
"var x = '" & Substitute ( ARTSFUNN::Lat ; ¶ ; ", " ) & "';" & ¶ &
"var y = '" & Substitute ( ARTSFUNN::Long ; ¶ ; ", " ) & "';" & ¶ &
这会产生如下结果:
var x = '59.436549';
var y = '10.629371';
其中两个变量显然都是字符串,然后您必须将其转换为数字。
我相信你应该这样做:
"var x = " & ARTSFUNN::Lat & ";¶var y = " & ARTSFUNN::Long & ";¶"
生产:
var x = 59.436549;
var y = 10.629371;
然后可以直接使用:
new mapkit.Coordinate(x,y)
使用您在以下位置的原始字段可以获得相同的结果:
"var x = " & GetValue ( MYMAP::longlat ; 2 ) & ";¶var y = " & GetValue ( MYMAP::longlat ; 1 ) & ";¶"
(假设经度是字段中列出的第一个值)。
我在 Filemaker 中使用 MapKit JS,可以像这样从 Filemaker Web View 中的输入获取坐标。
"const punkt = '" & Substitute ( MYMAP::longlat ; ¶ ; ", " ) & "';" & ¶ &
输入例如:59.436549, 10.629371 但我无法将其纳入 mapkit 定义。我得到纬度和经度值并确保它是一个数字。但是我需要逗号 (,).
var punkt // this is 59.658985, 10.790869
var punktxy = punkt.split(",");
var x = parseFloat(punktxy[0]);
var x = parseFloat(punktxy[1);
当我对它进行硬编码时:
new mapkit.Coordinate(59.658985, 10.790869)
但是我做错了。可能是因为当我像这样连接它时它是类型文本:
new mapkit.Coordinate(x + ',' + y)
这也不行:
new mapkit.Coordinate(x,y)
大概是字符串?我如何获得正确的值?这可能是一个 javascript 基本问题,但我在这里迷路了。
这是我的网络查看器代码,其中包含来自文本字段的 javascript。请注意,我将 x 和 y 值放入 javascript。这就是为什么我需要 3 个 js 文件,因为我似乎无法正确处理:mapkit.Coordinate(59.658985, 10.790869)
网络查看器:
// Load your specific implementation of MapKit JS ""; "const punkt = '" & Substitute ( ARTSFUNN::Lokalitet ; ¶ ; ", " ) & "';" & ¶ & GetLayoutObjectAttribute ( "map1.js" ; "content" ) & ARTSFUNN::Lat & " , " & ARTSFUNN::Long & GetLayoutObjectAttribute ( "map2.js" ; "content" ) & ARTSFUNN::Lat & " , " & ARTSFUNN::Long & GetLayoutObjectAttribute ( "map3.js" ; "content" ); "";
map1.js:
mapkit.init({
authorizationCallback: done => {
done(
"<<$$JWT.TOKEN>>"
);
}
});
var punktxy = punkt.split(",");
var x = parseFloat(punktxy[0]);
var x = parseFloat(punktxy[1);
var xy = (x + ','+ y); // doesn't work
var MarkerAnnotation = mapkit.MarkerAnnotation,
clickAnnotation;
var borch = new mapkit.CoordinateRegion(
new mapkit.Coordinate(
map2.js:
),
new mapkit.CoordinateSpan(0.005, 0.005)
);
var map = new mapkit.Map('map');
map.region = borch;
map.mapType = "hybrid";
map.setCenterAnimated(new mapkit.Coordinate(
map3.js:
), true);
console.log(map);
更新## - 刚刚测试,现在这似乎有效!
在 WebViewer 中定义纬度和经度:
"var x = '" & Substitute ( ARTSFUNN::Lat ; ¶ ; ", " ) & "';" & ¶ &
"var y = '" & Substitute ( ARTSFUNN::Long ; ¶ ; ", " ) & "';" & ¶ &
使用包含 map.js:
中的值var x = parseFloat(x);
var y = parseFloat(y);
// does not work if I don't convert to digit before use!
var bor = new mapkit.CoordinateRegion(
new mapkit.Coordinate(x,y),
new mapkit.CoordinateSpan(0.005, 0.005)
);
var map = new mapkit.Map('map');
map.region = bor;
map.mapType = "hybrid";
map.setCenterAnimated(new mapkit.Coordinate(x,y), true);
这不是真正的答案(除非你的问题纯粹是关于 "as digit" 部分),但我不能 post 在评论中写这么多代码。
在你的问题开头,你使用了一个名为 MYMAP::longlat
的字段,它显然包含两个由回车 return 分隔的坐标。您使用 Substitute()
将 return 替换为逗号。
现在您正在使用两个单独的字段,ARTSFUNN::Lat
和 ARTSFUNN::Lon
- 但您仍然对两者应用相同的 Substitute
操作。这似乎没有必要。
更重要的是,您正在做:
"var x = '" & Substitute ( ARTSFUNN::Lat ; ¶ ; ", " ) & "';" & ¶ &
"var y = '" & Substitute ( ARTSFUNN::Long ; ¶ ; ", " ) & "';" & ¶ &
这会产生如下结果:
var x = '59.436549';
var y = '10.629371';
其中两个变量显然都是字符串,然后您必须将其转换为数字。
我相信你应该这样做:
"var x = " & ARTSFUNN::Lat & ";¶var y = " & ARTSFUNN::Long & ";¶"
生产:
var x = 59.436549;
var y = 10.629371;
然后可以直接使用:
new mapkit.Coordinate(x,y)
使用您在以下位置的原始字段可以获得相同的结果:
"var x = " & GetValue ( MYMAP::longlat ; 2 ) & ";¶var y = " & GetValue ( MYMAP::longlat ; 1 ) & ";¶"
(假设经度是字段中列出的第一个值)。