【问题标题】:Google map custom marker based on database基于数据库的谷歌地图自定义标记
【发布时间】:2013-07-03 06:20:30
【问题描述】:

在 2 周内,我对 Google 地图进行了很多探索。我正在尝试阅读论坛和教程。但是当我要开发一个 GIS 网络时,我遇到了这个问题。我正在使用 Google maps apiv3、postgre 数据库和 php。我的数据库中有很多行。现在我只能根据我的数据库显示多个标记,但我之后是 标记具有基于数据库中列内容的唯一图标,例如 type 1 = 1.png type 2 = 2.png . 问题是类型太多,所以无法手动定义(因为类型太多,我在数据库列中已经有大约30种类型的内容了)。我使用 json 获取数据库值。我已经尝试阅读论坛和一些教程,但我找不到答案。对不起,我的英语不好。请帮助我,谢谢。 这是代码 index.php 和 json.php :

<html lang="en">
<head>
<script type="text/javascript">
    function initialize(){
    var peta;
    var gambar_tanda;
    gambar_tanda = 'assets/images/enseval.jpg';
    var x = new Array();
    var y = new Array();
    var customer_name = new Array();
    var rayon_name = new Array();
    // posisi default peta saat diload
    var lokasibaru = new google.maps.LatLng( -1.2653859,116.83119999999997);
    var petaoption = {
        zoom: 5,
        center: lokasibaru,
        mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        peta = new google.maps.Map(document.getElementById("map_canvas"),petaoption);
        var infowindow =  new google.maps.InfoWindow({
                      content: ''
        });
    // memanggil function ambilpeta() untuk menampilkan koordinat
        url = "json.php";
        $.ajax({
        url: url,
        dataType: 'json',
        cache: false,
        success: function(msg){
            for(i=0;i<msg.enseval.customer.length;i++){
                x[i] = msg.enseval.customer[i].x;
                y[i] = msg.enseval.customer[i].y;
                customer_name[i] = msg.enseval.customer[i].nama_customer;
                //rayon_name[i] = msg.enseval.customer[i].nama_rayon
                var point = new google.maps.LatLng(parseFloat(msg.enseval.customer[i].x),parseFloat(msg.enseval.customer[i].y));
                tanda = new google.maps.Marker({
                            position: point,
                            map: peta,
                            icon: gambar_tanda,
                            clickable: true
                });
            bindInfoWindow(tanda, peta, infowindow, msg.enseval.customer[i].nama_customer  );
            }
        }
        });
}
google.maps.event.addDomListener(window, 'load', initialize);
function bindInfoWindow(tanda, peta, infowindow, data) {
    google.maps.event.addListener(tanda, 'click', function() {
    infowindow.setContent(data);
    infowindow.open(peta, tanda);
    });
}
</script>

<?php  
require ('config.php');
$rayon = $_POST['rayon'];
$cabang = $_POST['org_id'];
//echo "$rayon, $cabang, $rayonhasil";
$sql = "SELECT distinct org_id, customer_name, attribute16, attribute17 FROM hasilgis";
$data = pg_query($sql);
$json = '{"enseval": {';
$json .= '"customer":[ ';
while($x = pg_fetch_array($data)){
    $json .= '{';
    $json .= '"id_customer":"'.$x['org_id'].'",
        "nama_customer":"'.htmlspecialchars($x['customer_name']).'",
        "x":"'.$x['attribute17'].'",
        "y":"'.$x['attribute16'].'"
    },';
}
$json = substr($json,0,strlen($json)-1);
$json .= ']';
$json .= '}}';

echo $json;
?>

【问题讨论】:

    标签: javascript php json google-maps google-maps-markers


    【解决方案1】:

    我不确定是什么问题:)

    您唯一必须做的就是为所有类型生成图标。您不必手动执行此操作 - 只需创建一个 scipt 即可为每种类型生成不同颜色的图标,并将其命名为 1.jpg2.jpg、...

    通过您的 json 消息传递类型,然后在客户端动态创建图标 url:

    gambar_tanda = 'assets/images/'+msg.enseval.customer[i].type+'.jpg';
    

    【讨论】:

    • 非常感谢。但是有很多不同的类型,因为在我的数据中,一个对象有 10-30 个类型,我有 43 个对象,还有一个唯一类型,所以我可能是有30*43的类型。但是使这种情况变得简单的是我只需要为每个正在运行的程序显示一个对象。所以我还能像 1.jpg 一样重命名吗?对不起,我的英语不好。
    • 好吧,我不确定你的意思——你可以随意命名你的图标。您只需定义要为每个对象显示的类型 - 它不必与从 DB 获得的类型相对应。
    • 我解决了这个问题,我错过了主要想法,非常感谢 gawi .. :)
    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 2011-11-05
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多