【问题标题】:Transfer google map coordinates to mysql database将谷歌地图坐标传输到mysql数据库
【发布时间】:2012-09-21 15:03:02
【问题描述】:

我有一个谷歌地图,用户可以在其中创建折线。我已将折线 (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);
                });

            });

    };

})();

【问题讨论】:

  • 您可以序列化数组并将其存储到您的数据库中。为了保存,base64_encode 你的序列化字符串。
  • 我是谷歌地图的新手,对不起约翰。请详细说明一下。

标签: php mysql google-maps-api-3 markers


【解决方案1】:

好了,下面是适合你的数据库解决方案:

表格路径将存储您的阵列中的路径。

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 当然是平均速度(不知道您是否想要它,以防万一)和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。 G。 while循环,你可以将所有坐标检索到一个数组中。

当然,首先您必须使用 INSERT INTO 构造或类似方法来存储该数据 :-)

【讨论】:

  • 谢谢 Lukasx Nowicki。这肯定会给我一些工作;)我会立即尝试实现。
  • 做我的客人。任何问题 - 我会在这里:-)
  • 谢谢你 Lukasz 你是救命稻草 :) 我肯定有更多问题 :)
【解决方案2】:

您可以随时存储它 - 这取决于您以后要如何使用这些数据。 您可以将其作为 JSON 编码数组存储在 TEXT 字段中,您可以将 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

有很多可能性和选择——就像我之前说的——这完全取决于你接下来想做什么。

【讨论】:

  • 基本上我必须将所有这些坐标保存到数据库中并为它们分配一个速度。然后制作一个标记沿着这条路径移动的动画(折线坐标)并将速度输出给用户@Lukasz诺维奇。我正在尝试寻找教程来帮助我解决这个问题,但找不到适合我的情况。
  • 你想为每个坐标或整个路径设置速度吗?
  • 也许您可以分享您提到的数组的一部分 - 它可能有助于解决您的问题。
  • 我可能有一部分折线以一定的速度说 30 公里/小时,另一部分说 40 公里/小时。当我触发动画时,应该通知用户速度的变化。我对如何进行这样的事情感到困惑。你能给我一个想法,我需要做些什么来实现这一目标。
【解决方案3】:

您可以使用多种解决方案,例如您的代码如下所示:

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可以隐藏或可见的输入到你的表单中,然后你保存到你的数据库中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 2018-05-04
    • 2015-02-05
    • 2012-10-18
    相关资源
    最近更新 更多