0

より良いヘルプを得るために#3を編集 します(忍耐に感謝します)これら2つのスクリプトを組み合わせたいです:

スクリプト 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]
                };

私は概念を理解していますが、構文を正しく理解できないようです...すべての提案、push(); を試し、多くの記事、サンプルを読みました...10 時間前にこれが必要でした。感謝。まだ十分な担当者がいれば、あなたに投票します:)ありがとう、ありがとう、ありがとう。

4

3 に答える 3

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

======

私は別のページで構築しました:

それは面倒です。Web がステートレスであることを認識していますか? つまり、ユーザーがページを離れると、データはユーザーのコンピューターに保存されません。これにはいくつかの方法があります。小さな情報を Cookie に保存するか、ページがデータをサーバー サイド スクリプトに送信し、サーバー サイド スクリプトがデータをファイルまたはデータベースに保存することができます。

一方、「別のページ」で別の JavaScript ファイルを意味する場合は、より簡単に始めてください。両方の JavaScript ファイルを 1 つのファイルに結合し、それを機能させます。

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() 関数に 1 つだけを渡したい場合、たとえばオブジェクト (中かっこで囲まれたものは「オブジェクト」と呼ばれます) を次のように書き直すことができます。

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;

ポイントは ['10, 20', '100, 200'] のような単なる配列であるため、割り当ては次のようになります。

 var the_points = ['10, 20', '100, 200']

関数内では the_points を使用して配列を参照します。

于 2013-06-09T02:13:57.343 に答える
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"');
});
于 2013-06-09T02:14:45.040 に答える
0

たぶんこれでうまくいくかもしれませんが、変数rid、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 + '"');
}
于 2013-06-09T02:13:09.120 に答える