OpenLayers学习笔记6——使用jQuery UI实现查询并标注(功能实现篇)

本篇博客接上篇是关于OpenLayers的地图标注及弹出窗(marker+popup),先来看下效果图:

下面给出代码,都写了注释,不做过多解释了:

///添加标记
function addMarke(x, y, attribute)
{

    //设置marker样式
    var style_mark = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
    style_mark.graphicWidth = 64;
    style_mark.graphicHeight = 64;
    style_mark.externalGraphic = "img/marker/tax.png";
    style_mark.fillOpacity = 0.5;
    style_mark.graphicOpacity = 1;
    /*
     style_mark.title = title;
     */
    //根据坐标点和样式创建一个矢量要素
    var point = new OpenLayers.Geometry.Point(x, y);
    var pointFeature = new OpenLayers.Feature.Vector(point, null, style_mark);
    pointFeature.attributes = attribute;

    //创建标注图层(矢量图层)
    if (markerLayer == null)
    {
        markerLayer = new OpenLayers.Layer.Vector("MarkeVector");
        map.addLayers([markerLayer]);
    }
    //将矢量要素添加至标注图层
    markerLayer.addFeatures([pointFeature]);

    //创建一个选择要素的控件(与marker绑定,从markerLayer图层中选择要素)
    if (selectControl == null)
    {
        selectControl = new OpenLayers.Control.SelectFeature(markerLayer,
            {
                hover: false,
                onSelect: onFeatureSelect,
                onUnselect: onFeatureUnselect
            });
        map.addControl(selectControl);
        selectControl.activate();

    }
}
//清除所有标记
function clearAllMarke()
{
    if (selectControl != null)
    {
        map.removeControl(selectControl);
        //销毁此对象
        selectControl.deactivate();
        selectControl = null;
    }
    if (markerLayer != null)
    {
        map.removeLayer(markerLayer);
        markerLayer = null;
    }
}

//创建popup显示的html
function createContentHTML(feature)
{
    var attr = feature.attributes;
    var contentHTML = "<div style='text-align: center;background-color: white'>";
    for (var b in attr)
    {
        contentHTML += b + ": " + "<textarea id='attributeValue' style='height 30px;font-size: 14px;text-align: center;vertical-align: middle;align-content: center'>" + attr[b] + "</textarea>" + "</br>";
    }

    return contentHTML + "</div>";

}

// Feature 选中事件响应
function onFeatureSelect(feature)
{

    selectedFeature = feature;
    var featureAttribute = feature.attributes;
    var popupContent = createContentHTML(feature);

    popup = new OpenLayers.Popup.CSSFramedCloud(
        null,                                          //Id
        feature.geometry.getBounds().getCenterLonLat(),//popup位置
        null,                                           //contentSize:popup内容大小
        popupContent,                                  //contentHTML:popup展示的内容,html字符
        null,
        true,                                          //closeBox:是否显示关闭按钮
        onPopupClose);                                 //closeBoxCallback:关闭按钮事件
    feature.popup = popup;
    map.addPopup(popup);

}
//关闭弹窗
function onPopupClose(evt)
{
    selectControl.unselect(selectedFeature);
}
// Feature取消选中事件响应
function onFeatureUnselect(feature)
{
    map.removePopup(feature.popup);
    feature.popup.destroy();
    feature.popup = null;
}

调用时代码:

 var lonlat = corTransform(120.48299, 36.1129);
    var lonLatStr = lonlat.toShortString();
    var lonLatArr = lonLatStr.split(",");
    var lon = lonLatArr[0];
    var lat = lonLatArr[1];
    var att = {
        名称: "山东省青岛第二中学",
        地址: "山东省青岛市崂山区松岭路70号",
        电话: "0532-88907255",
        类别: "教育学校:中学"

    };
    addMarke(lon, lat, att);

接下来需要实现的就是从数据库中查询数据批量的在地图上添加注记。本篇参考了博客:【openlayers】CSS3样式的Popups

时间: 2024-11-10 12:27:47

OpenLayers学习笔记6——使用jQuery UI实现查询并标注(功能实现篇)的相关文章

OpenLayers学习笔记5——使用jQuery UI实现查询并标注(UI篇)

最近事情很多,老板给的压力也很大,经常出差,另外项目和个人研究还都要跟上,本月要交论文,还要写专利,只能抽时间来学习其他的东西了.关于OpenLayers的在博客中不会写太多具体的实现(网上有很多openlayers的博客,关于加载wms.标记.量测的,我这里就不再重复了),只是记录自己的开发学习经验和一些需要注意的问题,真正做开发的都知道,要想学好开发只能通过自己默默的多磨..关于WW的学习和开发已经搁置了好久了,等过去这段时间,打算好好学一下jogl,争取做一些粒子模拟出来,另外打算采用rc

OpenLayers学习笔记3——使用jQuery UI美化界面设计

PC端软件在开发是有较多的界面库可以选择,比如DevExpress.BCG.DotNetBar等,可以很方便快捷的开发出一些炫酷的界面,最近在学习OpenLayers,涉及到web前端开发,在设计界面时刚开始不熟悉,设计的很丑,后来参照ArcGIS在线体验中心的demo以及对web前端界面设计库的调研,最终采用jQuery UI来美化界面(还有比较强大的Dojo).先来看下效果: 这里说下地图与影像切换两个按钮的实现,其他的都是一样的方式: CSS文件: #mapViewButton { wid

OpenLayers学习笔记4——使用jQuery UI实现测量对话框

OpenLayers学习最好的方式就是跟着其自带的示例进行学习,另外对web前端的开发设计要了解,慢慢积累,这样在一般的小项目中应该是足够用了.本篇参照量测demo实现对话框形式的量测,抛砖引玉,通过这个功能,后面的查询.定位等基于对话框的形式就很容易实现了.先看下效果图: 长度测量: 面积测量: 代码基本都是demo里的代码,就不贴出来了.这里需要注意的问题是,在关闭窗口的时候一定要使measureTools   deactive //测量 $("#Measure").click(f

Java程序员的JavaScript学习笔记(13—— jQuery UI)

计划按如下顺序完成这篇笔记: 1. 理念. 2. 属性复制和继承. 3. this/call/apply. 4. 闭包/getter/setter. 5. prototype. 6. 面向对象模拟. 7. jQuery基本机制. 8. jQuery选择器. 9. jQuery工具方法. 10. jQuery-在"类"层面扩展. 11. jQuery-在"对象"层面扩展. 12. jQuery-扩展选择器. 13. jQuery UI. 14. 扩展jQuery UI

Java程序猿的JavaScript学习笔记(9—— jQuery工具方法)

计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程

jQuery源码学习笔记:构造jQuery对象

3.1源码结构: (function( window, undefined ) { var jQuery = (function() { // 构建jQuery对象 var jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); } // jQuery对象原型 jQuery.fn = jQuery.prototype = { constructor:

Java程序员的JavaScript学习笔记(7——jQuery基本机制)

计划按如下顺序完成这篇笔记: 理念. 属性复制和继承. this/call/apply. 闭包/getter/setter. prototype. 面向对象模拟. jQuery基本机制. jQuery选择器. jQuery工具方法. jQuery-在"类"层面扩展. jQuery-在"对象"层面扩展. jQuery-扩展选择器. jQuery UI. 扩展jQuery UI. 这是笔记的第7篇,聊聊jQuery基本机制,学习的同时,我们试图实现一个缩略版本的jQue

OpenLayers学习笔记9——使用servlet与jquery-ui实现自动提示输入

做软件都要从用户的角度来做,怎么样让用户输入的更少,体验更好,我们就应该怎么来做,也就是需求驱动,客户都是大爷!题外话说完了,步入正题,本文实现在查询时输入查询条件时,自动提示数据库中包含改值所有记录(注意,我这里用的是包含,not start,not end,这是跟mysql的模糊查询相关的),看下实现效果: 1.使用jquery ui的autocomplete控件 jQuery UI Autocomplete是jQuery UI的自动完成组件它支持本地的Array/JSON数组.通过ajax

Java程序员的JavaScript学习笔记(9—— jQuery工具方法)

计划按如下顺序完成这篇笔记: 1.    理念. 2.    属性复制和继承. 3.    this/call/apply. 4.    闭包/getter/setter. 5.    prototype. 6.    面向对象模拟. 7.    jQuery基本机制. 8.    jQuery选择器. 9.    jQuery工具方法. 10.    jQuery-在"类"层面扩展. 11.    jQuery-在"对象"层面扩展. 12.    jQuery-扩