문제

사용자가 폴리 라인을 만들 수있는 Google지도가 있습니다.나는 폴리 라인 (LAT, LNG) 좌표를 배열에 저장했습니다.이제 PHP 또는 JavaScript를 사용하여 이러한 좌표를 MySQL 데이터베이스로 전송하거나 다른 옵션이 있습니까?어떻게 진행해야합니까?

여기에 내 코드가 있습니다 :

(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);
                });

            });

    };

})();
.

도움이 되었습니까?

해결책

지금, 여기에 데이터베이스 솔루션이 있습니다 :

테이블 경로는 배열에서 가지고있는 경로를 저장합니다.

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;
.

테이블 경로는 사용자 / 경로 이름 (원하는대로 원하는대로)을 저장합니다. PSTARTLAT / PSTARTLNG 필드의 시작점, PAVERAGESPEED는 물론 평균 속도입니다 (원하는지 모르지만 경우에 따라, PID는 다른 테이블과 함께 사용할 식별자입니다.

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
.

및 이제 e. 지. 루프는 모든 좌표를 배열로 검색 할 수 있습니다.

물론 먼저 삽입물을 사용하여 해당 데이터를 구축 또는 이와 유사하게 저장해야합니다. -)

다른 팁

원할 때마다 저장할 수 있습니다 - 나중에 데이터를 어떻게 사용하도록하는지에 따라 다릅니다. 텍스트 필드에 JSON 인코딩 된 배열로 저장할 수 있으므로 다음과 같이 분리 된 필드에 LAT / LNG 좌표를 저장할 수 있습니다.

// 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
.

나는 많은 가능성과 옵션이 있습니다 - 내가 전에 말했듯이, 그것은 당신이 다음에 무엇을하고 싶은지에 달려 있습니다.

많은 솔루션을 사용할 수 있습니다. 예를 들어 코드가 다음과 같습니다.

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은 양식에 숨겨 지거나 보이는 입력을 입력 한 다음 데이터베이스에 저장

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top