编辑#3 为了获得更好的帮助(感谢您的耐心)我想结合这两个脚本:
脚本1:
//get csv file and set up array
d3.csv('../mapdata/mapdatatest.csv', function (csv) {
var rid = [],
lat = [],
lon = [],
pinclr = [],
name = [],
str = [],
citystzip = [],
phone = [],
lastinspturl = [],
lastinspctdt = [];
csv.map(function (d) {
rid.push(d.rid).toString();
lat.push(d.lat).toString();
lon.push(d.lon).toString();
pinclr.push(d.pinclr).toString();
name.push(d.name).toString();
str.push(d.str).toString();
citystzip.push(d.citystzip).toString();
phone.push(d.phone).toString();
lastinspturl.push(d.lastinspturl).toString();
lastinspctdt.push(d.lastinspctdt).toString();
for (i = 0; i < rid.length; i++) {
var points = ('"' + lat[i] + "," + lon[i] + '"');
}
});
});
脚本2:
deCarta.Core.Configuration.clientName = Config.clientName;
deCarta.Core.Configuration.clientPassword = Config.clientPassword;
var center = new deCarta.Core.Position(Config.position);
var pinOverlay = new deCarta.Core.MapOverlay({
name: "Pins"
});
window.map = new deCarta.Core.Map({
id: "mapContainer",
autoResize: true,
zoom: 11,
center: center,
onReady: function (map) {
map.addLayer(pinOverlay);
postPins();
}
});
function postPins() {
var points = {
"points": [
//i have typed in these values for testing purposes only
"47.15211, -97.570039",
"48.625045, -101.375369",
"48.39679, -101.052669"]
};
for (var i = 0; i < points.points.length;) {
pos = new deCarta.Core.Position(points.points[i]);
pin = pin = new deCarta.Core.Pin({
position: center.clone(),
text: 'pin: ' + (points.points[i]),
position: pos
// imageSrc: 'img/pin.png'
});
pinOverlay.addObject(pin);
i++;
}
var view = new deCarta.Core.BoundingBox(points.points);
var centerAndZoom = view.getIdealCenterAndZoom(window.map);
map.zoomTo(centerAndZoom.zoom);
map.centerOn(centerAndZoom.center);
}
我想要实现的结果:
而不是像我在SCRIPT 2中那样使用输入的值 - 我希望从SCRIPT 1中输入这些值。
所以
var points = {
"points": [
//i have typed in these values for testing purposes only
"47.15211, -97.570039",
"48.625045, -101.375369",
"48.39679, -101.052669"]
};
需要
var points = {
"points": [
THE "point" VALUES FROM THE SCRIPT 1 loop]
};
我得到的概念,似乎无法获得正确的语法...尝试了所有的建议,推();,阅读了很多文章,样本......我需要这个10小时前,任何帮助将不胜感激。如果我有足够的代表,我会投票给你:)谢谢,谢谢,谢谢。
答案 0 :(得分:2)
我很难理解你的问题。这有什么用处:
var points = {
"points": [
"47.15211, -97.570039",
"48.625045, -101.375369",
"48.39679, -101.052669"
]
};
console.log(points.points);
var array = points.points;
var array_len = array.length;
for(var i = 0; i < array_len; ++i)
{
var str = array[i];
console.log(str);
}
--output:--
[ '47.15211, -97.570039',
'48.625045, -101.375369',
'48.39679, -101.052669' ]
47.15211, -97.570039
48.625045, -101.375369
48.39679, -101.052669
======
我建立在另一页上:
这很麻烦。您是否知道网络无状态?这意味着一旦用户离开页面,用户的计算机上就不会保存任何数据。有一些方法:您可以在cookie中保存少量信息,或者页面可以将数据发送到服务器端脚本,然后服务器端脚本可以将数据保存在文件或数据库中。
另一方面,如果通过&#34;在另一页上&#34;你的意思是另一个javascript文件,然后开始更简单。将两个javascript文件合并到一个文件中并使其工作,例如:
func1(a, b) = {
....
return results;
}
func2(x, y, z) = {
info = func1(x, y) + z
//do something with info
}
然后,只需将func1和func2放入单独的文件中,并在html页面中包含它们:
<script type='text/javascript' src='js2.js'></script>
<script type='text/javascript' src='js1.js'></script>
请确保您获得正确的顺序:如果js1.js中的函数调用js2.js中定义的函数,则需要首先包含js2.js。
====
中将Html.HTML
<html>
<head>
<title>Test</title>
<script type='text/javascript' src='js2.js'></script>
<script type='text/javascript' src='js.js'></script>
<style type='text/css'>
.colorText {
color: blue;
}
.surprise {
background: red;
}
</style>
</head>
<body>
<div id="show_results" class="colorText">Hello world</div>
</body>
</html>
js.js
function do_stuff(x, y, z) {
//send two of this function's arguments to another function
//defined in another script:
var results = do_other_stuff(x, y);
return results + z;
}
//This function will execute once the html page loads:
window.onload = function() {
var my_results = do_stuff(10, 20, 30);
alert("Inserting results in <div>");
//The following div won't exist until after the page loads:
var div = document.getElementById('show_results');
div.innerHTML = my_results;
}
如果window.onload事情太混乱,只需摆脱它并使用alert()来显示结果(或您感兴趣的任何其他信息)。
js2.js
function do_other_stuff(x, y) {
return x+y;
}
现在,如果您只想将一件事传递给do_other_stuff()函数,例如你的对象(围绕它们的东西被称为&#39;对象&#39;),你可以像这样重写你的脚本:
js.js
function do_stuff() {
var points = {
"points": [
"47.15211, -97.570039",
"48.625045, -101.375369",
"48.39679, -101.052669" ]
};
do_other_stuff(points);
}
do_stuff();
然后重写do_other_stuff()看起来像这样:
js2.js
function do_other_stuff(points_obj) {
//do stuff with points_obj, e.g.
alert( points_obj.points[0] );
}
在此示例中,脚本不对任何html元素进行操作,因此无需等待页面加载。
====
查看以下评论是否有帮助:
1)这个循环:
for (i = 0; i < rid.length; i++) {
var points = ('"' + lat[i] + "," + lon[i] + '"');
}
相当于:
var points = '"' + lat[rid.length] + "," + lon[rid.length] + '"';
2)你用引号做的事情真的很难看。如果您只是想将某些数字转换为字符串,则可以执行以下操作:
var point = lat[i] + ", " + lon[i];
js无法将数字和字符串一起添加,因此js假设您正在尝试创建字符串,并且js将数字转换为字符串然后将字符串添加到一起。看看这个:
var str = 3 + ', ' + 2;
var arr = [str];
console.log(arr);
--output:--
[ '3, 2' ]
3)你可能想做这样的事情:
var points = []
for (i = 0; i < rid.length; i++) {
points.push( lat[i] + ", " + lon[i] );
}
4)然后将点数组传递给你的deCarta东西,你可以这样做:
var points = []
for (i = 0; i < rid.length; i++) {
points.push( lat[i] + ", " + lon[i] );
}
do_stuff(points);
然后你会像这样定义do_stuff():
function do_stuff(the_points) {
//Do all your deCarta stuff here
window.map = new deCarta.Core.Map({
id: "mapContainer",
autoResize: true,
zoom: 11,
center: center,
onReady: function (map) {
map.addLayer(pinOverlay);
postPins();
}
});
function postPins() {
console.log(the_points); //You have access to the points array
obj = {"points": the_points};
=======
1)当你调用一个函数时,js将函数调用与函数定义对齐:
do_stuff(10, 20, 30) <----function call
function do_stuff( x, y, z) {...} <---function definition
然后javascript执行以下任务:
var x = 10;
var y = 20;
var z = 30;
2)然后在函数内部,使用变量x,y和z来引用这些值。
3)在我发布的代码中,函数调用和函数定义如下所示:
do_stuff(points)
function do_stuff(the_points) {...}
所以js做了这个任务:
var the_points = points;
分数只是像[&#39; 10,20&#39;,&#39; 100,200&#39;]那样的数组,所以分配相当于:
var the_points = ['10, 20', '100, 200']
在函数内部,您使用the_points来引用数组。
答案 1 :(得分:1)
你可以使用这样的东西来遍历数组中的每一对:
var points = [ "47.15211, -97.570039", "48.625045, -101.375369", "48.39679, -101.052669"];
points.forEach(function (point) {
point = point.match(/^"([0-9\.]+)\s*,\s*([0-9\.]+)"$/);
console.log('"' + point[0] + '", "' + point[1] + '"');
});
如果您想将它们放在自己的数组中,或者类似的东西:
var points = [ "47.15211, -97.570039", "48.625045, -101.375369", "48.39679, -101.052669"],
lat = [], lon = [];
points.forEach(function (point) {
point = point.match(/^"([0-9\.]+)\s*,\s*([0-9\.]+)"$/);
lat.push(point[0]);
lon.push(point[1]);
});
lat.forEach(function (lat, id) {
console.log('"' + lat + '", "' + lon[id] + '"');
});
甚至:
lon.forEach(function (lon, id) {
console.log('"' + lat[id] + '", "' + lon + '"');
});
另外,有人在这里发表评论并说当你加入它时我不应该使用拆分。如果你不想让它们像这样分开,你可以随时使用:
points.points = points.points.map(function (point) {
return point.replace(/^"([0-9\.]+)\s*,\s*([0-9\.]+)"$/, '"$1", "$2"');
});
答案 2 :(得分:0)
也许这会起作用,但我不知道你的变量是什么,lat和long是什么。也许你可以发布它。要在Chrome或Firefox中查看变量,您可以执行以下操作:
console.log(JSON.stringify(rid);
按F12查看控制台。
var points={};
points.points=[];
for (i = 0; i < rid.length; i++) {
points.points.push('"' + rid[i].lat + "," + rid[i].lon + '"');
}