1

2 週間で、私は Google マップについて多くのことを調べました。フォーラムとチュートリアルを読んでみます。しかし、GIS Web を開発するときにこの問題が発生しました。Google マップの apiv3、postgre データベース、および php を使用しています。データベースには非常に多くの行があります。現在、データベースに基づいて複数のマーカーのみを表示できますが、その後、タイプ 1 = 1.png、タイプ 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;
?>
4

1 に答える 1

1

何が問題なのかわからない:)

あなたがしなければならないことは、すべてのタイプのアイコンを生成することだけです。手動で行う必要はありません。種類ごとに異なる色のアイコンを生成するスクリプトを作成し1.jpg、 、2.jpg、 ...などの名前を付けるだけです。

json メッセージを介してタイプを渡し、クライアント側よりもアイコンの URL を動的に作成します。

gambar_tanda = 'assets/images/'+msg.enseval.customer[i].type+'.jpg';
于 2013-07-05T14:33:52.747 に答える