-1

ユーザーがポリラインを作成できるGoogleマップがあります。ポリライン (緯度、経度) 座標を配列に格納しました。これらの座標をmysqlデータベースに転送するためにphpまたはjavascriptを使用したいのですが、他に良いオプションはありますか? どうすればいいですか?

これが私のコードです:

(function() {
    window.onload = function() {

    var path;
    var marker;
    var infowindow;
    var places = [];

    //create reference to div tag in HTML file
    var mapDiv = document.getElementById('map');

    // option properties of map
    var options = { 
            center: new google.maps.LatLng(-20.2796, 57.5074),
            zoom : 16,
            mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    // create map object
    var map = new google.maps.Map(mapDiv, options);

    // create MVC array to populate on click event
    var route = new google.maps.MVCArray();

    var polyline = new google.maps.Polyline({
        path: route,
        strokeColor: '#ff0000',
        strokeOpacity: 0.6,
        strokeWeight: 5
    });

    polyline.setMap(map);

    // create click event,attach to map and populate route array

    google.maps.event.addListener(map,'click', function(e) {

        // create reference to polyline object
         path = polyline.getPath();

         // add the position clicked on map to MVC array
        path.push(e.latLng);

    });

    // display coordinates
    document.getElementById('coords').onclick = function() {

        for(var i = 0; i < path.getLength(); i++) {

            alert('coords: ' + path.getAt(i).toUrlValue(2) +'\n');
        }


    }

    // create marker on right click
        google.maps.event.addListener(map,'rightclick', function(e) {

                marker = new google.maps.Marker({
                position: e.latLng,
                map: map
            });
                places.push(e.latLng);

                // get coordinates in infowindow on click

                google.maps.event.addListener(marker,'click', function(event){

                    if(!infowindow) {

                        infowindow = new google.maps.InfoWindow();

                    }
                    infowindow.setContent('coords: ' + marker.getPosition().toUrlValue(3));
                    infowindow.open(map,marker);
                });

            });

    };

})();
4

3 に答える 3

2

いつでも保存できます。後でそれらのデータをどのように使用するかによって異なります。JSON エンコードされた配列として TEXT フィールドに保存できます。次のように、緯​​度/経度座標を別々のフィールドに保存できます。

// Table for polylines
CREATE TABLE `polylines` (
  `pID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `pName` VARCHAR(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`pID`)
)
ENGINE = MyISAM
CHARACTER SET utf8 COLLATE utf8_general_ci;

// Table for coordinates
CREATE TABLE `coords` (
  `cID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `cPolyline` INTEGER UNSIGNED NOT NULL,
  `cLat` VARCHAR(15) NOT NULL,
  `cLng` VARCHAR(15) NOT NULL,
  PRIMARY KEY (`cID`)
)
ENGINE = MyISAM
CHARACTER SET utf8 COLLATE utf8_general_ci;

次のようなポリラインを取得できます。

SELECT * FROM polylines WHERE pName = 'something'

そして調整します:

SELECT cLat, cLng FROM coords WHERE cPolyline = ID

前にも言ったように、多くの可能性とオプションがありますが、それはすべて、次に何をしたいかによって異なります。

于 2012-09-30T14:15:14.757 に答える
2

さて、これがあなたのためのデータベースソリューションです:

テーブル パスには、配列から取得したパスが格納されます。

CREATE TABLE `gmap`.`paths` (
  `pID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `pName` VARCHAR(75) NOT NULL,
  `pStartLat` VARCHAR(25) NOT NULL,
  `pStartLng` VARCHAR(25) NOT NULL,
  `pAverageSpeed` FLOAT NOT NULL,
  PRIMARY KEY (`pID`)
)
ENGINE = MyISAM;

テーブルパスは、ユーザー/パス名 (必要なもの) を pName フィールドに格納し、開始点を pStartLat/pStartLng フィールドに格納します。pAverageSpeed はもちろん平均速度です (念のため、必要かどうかはわかりません)。別のテーブルで使用します。

CREATE TABLE `gmap`.`coords` (
  `cID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `cLat` VARCHAR(25) NOT NULL,
  `cLng` VARCHAR(25) NOT NULL,
  `cSpeed` FLOAT NOT NULL,
  `cPath` INTEGER UNSIGNED NOT NULL,
  PRIMARY KEY (`cID`)
)
ENGINE = MyISAM;

このテーブルを使用すると、座標を保存できます-それぞれに速度があります.

ここで、「TestOne」というパスを表示したいとしましょう。

// Connect to the database - I assume you can do that
// and retrieve data

SELECT * FROM paths WHERE pName = "TestOne"

これで、ID、名前、開始点の座標、およびテーブルの平均速度が得られました (mysql_fetch_assoc が最適です)。

次に、ID を使用して残りの座標を取得できます。

SELECT * FROM coords WHERE cPath = ID

そして、while ループなどを使用して、すべての座標を配列に取得できます。

もちろん、最初に INSERT INTO 構造などを使用してそのデータを保存する必要があります:-)

于 2012-09-30T14:51:04.523 に答える
1

多くのソリューションを使用できます。たとえば、コードは次のようになります。

var my_map= new GMap2(document.getElementById("my_map"));
    my_map.setCenter(new GLatLng(36.82,10.17),10);
    my_map.addControl(new GSmallMapControl());
    GEvent.addListener(my_map, "click", function(overlay,point){
    var lat = point.lat();
    var lng = point.lng();
    $('#input_lat').val(lat);
    $('#input_long').val(lng); 
 });

およびinput_lat、input_longは、フォームへの入力を非表示または表示することができ、データベースに保存します

于 2012-09-30T14:14:22.357 に答える