GetFeatureInfo + OpenLayer + GeoSclierver

Thảo luận trong 'Lập trình cho mã nguồn mở' bắt đầu bởi ttmdcd, 3/5/12.

  1. ttmdcd

    ttmdcd New Member

    Tham gia ngày:
    20/3/12
    Bài viết:
    18
    Đã được thích:
    0
    Điểm thành tích:
    0
    Chào các bạn

    mình có đoạn code thế này
    // support GetFeatureInfo
    map.events.register('click', map, function (e) {
    document.getElementById('nodelist').innerHTML = "Loading... please wait...";
    var params = {
    REQUEST: "GetFeatureInfo",
    EXCEPTIONS: "application/vnd.ogc.se_xml",
    BBOX: map.getExtent().toBBOX(),
    SERVICE: "WMS",
    INFO_FORMAT: 'text/html',
    QUERY_LAYERS: map.layers[0].params.LAYERS,
    FEATURE_COUNT: 50,
    Layers: 'topp:states',
    WIDTH: map.size.w,
    HEIGHT: map.size.h,
    format: format,
    X: event.xy.x,
    Y: event.xy.y,
    styles: map.layers[0].params.STYLES,
    srs: map.layers[0].params.SRS
    };
    OpenLayers.loadURL("http://localhost:8082/geoserver/topp/wms", params, this, setHTML, setHTML);


    OpenLayers.Event.stop(e);
    });

    function setHTML(response) {
    document.getElementById('nodelist').innerHTML = response.responseText;
    };

    nhưng khi mình click vào bản đồ thì mình chỉ thấy Loading... please wait... chứ mình ko lấy dc thông tin của vùng mà mình click vào
    mong dc mọi người giúp đỡ
    cảm ơn mọi người
     
    Tags:
  2. learngis

    learngis Moderator

    Tham gia ngày:
    1/1/12
    Bài viết:
    126
    Đã được thích:
    4
    Điểm thành tích:
    16
    Nơi ở:
    Huế
    Mình edit vào đó bạn xem thế nào
     
    Last edited by a moderator: 7/5/12
  3. ttmdcd

    ttmdcd New Member

    Tham gia ngày:
    20/3/12
    Bài viết:
    18
    Đã được thích:
    0
    Điểm thành tích:
    0
    chào các bạn
    đoạn code trên mình dùng window.open(params, '', 'with=1200,height=50,scrollbars=1'); thì mình lấy dc dữ liệu của nó. nhưng mình phải mở 1 trình duyệt khác thì mình mới có thể xem dc đoạn text

    bây giờ mình muốn hiển thị thông tin ấy lên trên popup. mình có đoạn code thế này
    var popup_window;
    var info = new OpenLayers.Control.WMSGetFeatureInfo({
    url: 'http://localhost:8082/geoserver/postgis/wms',
    title: 'Identify features by clicking',
    queryVisible: true,
    layers: [tiled],
    eventListeners: {
    getfeatureinfo: function (event) {
    if (popup_window != null) {
    map.removePopup(popup_window);
    }



    var message = "<div " + event.responseText + "</div>";
    popup_window = new OpenLayers.Popup.FramedCloud(
    "ga",
    map.getLonLatFromPixel(event.xy),
    new OpenLayers.Size(10000, 10000),
    message,
    null,
    true
    );
    // popup_window.minSize = new OpenLayers.Size(200, 200);
    popup_window.autoSize = true;
    map.addPopup(popup_window);


    }
    }
    });
    map.addControl(info);
    info.activate();
    vấn đề là mình ko lấy dc dữ liệu trả về. popup luôn trống. mình ko biết lỗi ntn . mong mọi người giúp đỡ. cám ơn mọi người.
    ah bạn doremon có gửi tin nhắn cho mình. nhưng bạn đã chọn không nhận tin nhắn riêng hoặc không cho phép nhận tin nhắn riêng. Bạn có thể cho mình địa chỉ liên lạc của bạn dc ko
    yahoo của mình : ttmdcd
    cảm ơn mọi người nhiều
     
  4. duongdh_ciren

    duongdh_ciren Member

    Tham gia ngày:
    27/4/12
    Bài viết:
    122
    Đã được thích:
    0
    Điểm thành tích:
    16
    Nơi ở:
    Hà nội
    Phải config Proxy thì mới lấy được thông tin của đối tượng.
    Việc config Proxy (*.cgi) tùy thuộc vào webserver
     
  5. ttmdcd

    ttmdcd New Member

    Tham gia ngày:
    20/3/12
    Bài viết:
    18
    Đã được thích:
    0
    Điểm thành tích:
    0
    chào bạn
    mình dùng geoserver + asp.net
    config proxy như thế nào vậy bạn
     
  6. ttmdcd

    ttmdcd New Member

    Tham gia ngày:
    20/3/12
    Bài viết:
    18
    Đã được thích:
    0
    Điểm thành tích:
    0
    chào các bạn
    mình dùng openlayer+ asp.net+geoserver+postgis
    bạn nào biết config proxy thì chỉ giúp mình với.
    mình đã sửa code của mình theo sự gợi ý của bạn learngis. nhưng dữ liệu trả về toàn là trống thôi
    mong các bạn giúp đỡ
     
  7. duongdh_ciren

    duongdh_ciren Member

    Tham gia ngày:
    27/4/12
    Bài viết:
    122
    Đã được thích:
    0
    Điểm thành tích:
    16
    Nơi ở:
    Hà nội
    Mình sẽ có hướng dẫn config proxy (file *.cgi) trên IIS cho bạn.
    Nếu không config thì những cái webgis mình phát triển không thể lấy thông tin và dùng chuẩn wfs được.
    Bạn đợi nhé, khi nào xong mình post lên
     
    Last edited by a moderator: 9/5/12
  8. ttmdcd

    ttmdcd New Member

    Tham gia ngày:
    20/3/12
    Bài viết:
    18
    Đã được thích:
    0
    Điểm thành tích:
    0
    cảm ơn bạn nhiều nhé
    mong sớm nhận dc hồi âm của bạn
     
  9. soiqualang_chentreu

    soiqualang_chentreu Member

    Tham gia ngày:
    13/1/12
    Bài viết:
    166
    Đã được thích:
    0
    Điểm thành tích:
    16
    Web:
    Bạn ơi, bạn chỉ mình cách config Proxy (*.cgi) của Mapserver với, mình dùng Mapserver + Openlayer. Cũng đang bí chỗ lấy thuộc tính đối tượng nè.hic
    Cảm ơn bạn trước nha. Mong sớm đọc được bài viết của bạn
     
  10. khanhduy_k35

    khanhduy_k35 New Member

    Tham gia ngày:
    13/8/12
    Bài viết:
    11
    Đã được thích:
    0
    Điểm thành tích:
    0
    Chào các bạn ..trước đấy mình có làm về geoserver + openlayer + asp.net mình cũng đã từng gặp vấn đề như thế..khi getFeatureInfo thì bị lỗi proxy nên ko có kết quả trả về..Mình có cấu hình proxy nhưng cũng ko được..khi lấy kết quả trả về toàn trả về 1 tab mới bên trình duyệt và trả về dạng text...tuy nhiên cái khó ló cái khôn..
    Bạn nào làm về asp thì chắc phải biết ajax..và mình đã dùng ajax để lấy kết quả trả về mà ko cần cấu hình proxy..
    Đây là demo WebGis của mình lấy thông tin của xã huyện tỉnh việt nam khi click rất chính xác...
    bạn có thể tham khảo,dữ liệu của mình còn bị lỗi font tcvn khi hiển thị tuy nhiên mình có code javascript để chuyển từ font tcvn sang font unicode nên hiển thị ko có lỗi gì cả
    Đăng kí hoặc đăng nhập để xem link
    Cách của mình như thế này

    bên trang .aspx có hàm lấy thông tin khi click lên bản đồ
    Mã:
                /*duylk 08/11/2012*/
                /*funtion lay thong tin tu map khi click vao ban do*/
                /*layer: là tên layer bạn muốn lấy thông tin*/
                /*pixelx: là vị trí bạn click lên map theo pixel*/
                /*pixely: là vị trí bạn click lên map theo pixel*/
                /*lonx: longtude bạn click*/
                /*latx: latitude bạn click*/
                function getInfoMapWhenClick(layer, pixelx, pixely, lonx, latx) {
                    var url = pathMapGis /*đây chính là đường dẫn của layer của bạn cần lấy thông tin cái này sẽ vượt qua proxy mà ko cần cấu hình*/
                                + "?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&LAYERS=" + layer
                                + "&QUERY_LAYERS=" + layer + "&STYLES="
                                + "&BBOX=" + map.getExtent().toBBOX()
                                + "&FEATURE_COUNT=5"
                                + "&HEIGHT=" + map.size.h
                                + "&WIDTH=" + map.size.w
                                + "&FORMAT=image%2Fpng"
                                + "&INFO_FORMAT=text%2Fplain"
                                + "&SRS=EPSG%3A4326"
                                + "&X=" + pixelx
                                + "&Y=" + pixely
                                + "&EXCEPTIONS=application/vnd.ogc.se_xml";
                 $.ajax({
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        data: "{url: '" + url + "',lon: '" + lonx + "',lat: '" + latx + "'}",
                        url: "pgPcbMap.aspx/getMapInfoWhenClick",
                        dataType: "json",
                        success: function (response) {
                            var resuilt = response.d;
                            /*resuilt chính là kết quả trả về khi click bạn có thể tùy tâm sử lý với cái này + jquery để hiển thị lên popup thì tuyệt đẹp*/
                        } });
                 }
    
    
    
    bên trang codebihind có hàm sử lý thông tin khi click

    Mã:
        /// <summary>
        /// duylk 02/11/2012
        /// Phuong thuc lay thong tin cua map khi click vao 1 diem bat ki
        /// Kết quả trả về là thông tin của xã huyện tỉnh được click
        /// </summary>
        /// <param name="url">toan tu truyen vao</param>
        [WebMethod()]
        public static List<tblInvResuiltGisMapEntity> getMapInfoWhenClick(string url, string lon, string lat)
        { 
            WebClient wc = new WebClient();        byte[] response = wc.DownloadData(url);
            string resource = Encoding.UTF8.GetString(response);
            /*việc download với url truyền từ aspx giúp ta vượt qua được proxy dể dàng*/
            ////
            /*xử lý dữ liệu trả về ở đây bạn nhé*/
            return .....;
        }
    
    Đây là cách mình làm và hoàn toàn thành công dù đem lên bất kì server nào để chạy...bạn đọc và hiểu ý tưởng để làm cho phù hợp nhé..
    p/s: nếu cần giúp đỡ trực tiếp thì yahoo của mình là: khanhduy_k35 hoặc skype:ymg.duylk hoặc sdt:01683058859
     
  11. soiqualang_chentreu

    soiqualang_chentreu Member

    Tham gia ngày:
    13/1/12
    Bài viết:
    166
    Đã được thích:
    0
    Điểm thành tích:
    16
    Web:
    Cảm ơn bạn nhiều nhé, để mình thử xem sao, hi vọng Mapserver dùng được.hi
     

Chia sẻ trang này

Share
Đang tải...