<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    咖啡伴侶

    呆在上海
    posts - 163, comments - 156, trackbacks - 0, articles - 2

    TWaverSVG 結合 GoogleMap

    Posted on 2009-10-30 14:45 oathleo 閱讀(1798) 評論(3)  編輯  收藏 所屬分類: TWaver
    GoogleMap是個相當不錯的項目,客戶里就有不少采用GoogleMap來做底層拓撲呈現。(免費加好用的東西,沒有人不喜歡)
    TWaverSVG這個時候可以和GoogleMap結合,完成拓撲的Gis展現功能。

    1.申請個GoogleMap的Key(廢話)
    2.半個小時學習下GoogleMap的基本API

    3.寫代碼:
    1)構建html,引入googlemap的js
            <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=abcdefg" type="text/javascript">
            
    </script>
       引入twaver相關js css
    省略......

    2)編寫js前臺邏輯
            var map_canvas = document.createElement('div');
            parentDiv.appendChild(map_canvas);
            map_canvas.style.width 
    = parentDiv.style.width;
            map_canvas.style.height 
    = parentDiv.style.height;
            map_canvas.style.position 
    = 'absolute';
            
            
    var map = new GMap2(map_canvas);
            map.addControl(
    new GLargeMapControl());
            map.addControl(
    new GMapTypeControl());
            map.setCenter(
    new GLatLng(51.368.24), 5);

            var box = new TWaver.TDataBox({
                url: 'webgis',
                dataBoxKey: 'google',
                synchronizedRequest: 
    true,
                initializeParams: {
                    'twaver.response.target': 'network'
                }
            });


            network = new TWaver.TSVGNetwork(box, {
                hasToolBar: 
    false,
                isToolbarEnable: 
    false,
                isNodeResizable: 
    false,
                isShapeEditable: 
    false,
                isEnablePopupMenu: 
    true,
                isEnableRectangleSelect: 
    false,
                useDefaultLoading: 
    false,
                isExpandToPanel: 
    false,
                ieSVGSrcUrl: 'demos
    /webgis/svgloading.svg',
                htmlParent: svgDiv,
                prepareCustomPopupMenu: 
    function(evt, _currentElement, type){
                
                }
            });

            var refreshNetwork = function(){
                
    var southWest = map.getBounds().getSouthWest();
                
    var northEast = map.getBounds().getNorthEast();
                
    var center = map.getCenter();
                box.appendRequestBaseParams({
                    'view_height': parseInt(svgDiv.style.height),
                    'view_width': parseInt(svgDiv.style.width),
                    'view_map_mminX': southWest.lng(),
                    'view_map_mmaxY': southWest.lat(),
                    'view_map_mmaxX': northEast.lng(),
                    'view_map_mminY': northEast.lat(),
                    'center_lat': center.lat(),
                    'center_lon': center.lng(),
                    'zoom': map.getZoom()
                }, 
    true);
                
    var selectID = network.getLastSelectedElementID();
                network.refreshSVGNetwork(
    null,function(){
                    
    if (selectID) {
                        network.setCurrentSubNetworkElementSelectedByID(selectID);
                    }
                });
            }
            
            GEvent.addListener(map, 
    "moveend"function(oldLevel, newLevel){
                refreshNetwork();
            });
            
            GEvent.addListener(map, 
    "mousemove"function(latlng){
                window.status 
    = latlng;
            });

    注意,這里通過googleMap上的監聽機制 把Map和Network的聯動進行綁定。

    3)Java后臺代碼
        protected TSVGNetwork getNetwork(HttpServletRequest request) {
            GoogleGISNetwork network 
    = new GoogleGISNetwork(box, 120.85288236121.9326249599999831.85651591999999630.6819477);
            view_width 
    = Integer.valueOf(request.getParameter("view_width")).intValue();
            view_height 
    = Integer.valueOf(request.getParameter("view_height")).intValue();
            String minx 
    = request.getParameter("view_map_mminX");
            String maxy 
    = request.getParameter("view_map_mmaxY");
            String maxx 
    = request.getParameter("view_map_mmaxX");
            String miny 
    = request.getParameter("view_map_mminY");
            zoom 
    = Integer.parseInt(request.getParameter("zoom"));
            centerlat 
    = Double.parseDouble(request.getParameter("center_lat"));
            centerlon 
    = Double.parseDouble(request.getParameter("center_lon"));
            network.setNetworkParams(Integer.valueOf(view_width).intValue(), Integer.valueOf(view_height).intValue(), Double.valueOf(minx).doubleValue(), Double.valueOf(maxx)
                    .doubleValue(), Double.valueOf(miny).doubleValue(), Double.valueOf(maxy).doubleValue(), zoom, 
    new GeoCoordinate(centerlon,centerlat));
            
    return network;
        }

        
    public void handleElementLocation(HttpServletRequest request, HttpServletResponse response) throws Exception {
            String requestContentParameters 
    = WebUtils.getRequestParameter(request, ContentParameters);
            String[] idValue 
    = WebUtils.parseElementContentParameters(requestContentParameters);
            Element element 
    = WebUtils.getElementFromDataBox(box, idValue[0]);
            String[] xy 
    = WebUtils.parseParamsComma(idValue[1]);
            
    if (!WebUtils.equalNull(idValue[2])) {
                Element parent 
    = WebUtils.getElementFromDataBox(box, idValue[2]);
                propertyChangeExecuter.setElementParent(element, parent);
            }
            
    int zoom = Integer.parseInt(request.getParameter("zoom"));
            calculateMercatorScreemLocation(element, Integer.parseInt(xy[
    0]), Integer.parseInt(xy[1]), view_width, view_height, zoom, centerlat, centerlon);
        }

        
    public void handleMultiElementLocation(HttpServletRequest request, HttpServletResponse response) throws Exception {
            String requestContentParameters 
    = WebUtils.getRequestParameter(request, ContentParameters);
            String[] idValue 
    = WebUtils.parseElementContentParameters(requestContentParameters);
            String[] ids 
    = WebUtils.parseParamsComma(idValue[0]);
            String[] xy 
    = WebUtils.parseParamsComma(idValue[1]);
            Element parent 
    = null;
            
    if (!WebUtils.equalNull(idValue[2])) {
                parent 
    = WebUtils.getElementFromDataBox(box, idValue[2]);
            }
            
    int zoom = Integer.parseInt(request.getParameter("zoom"));
            
    for (int i = 0; i < ids.length; i++) {
                Element element 
    = WebUtils.getElementFromDataBox(box, ids[i]);
                
    if (parent != null) {
                    element.setParent(parent);
                }
                calculateMercatorScreemLocation(element, Integer.parseInt(xy[
    0]), Integer.parseInt(xy[1]), view_width, view_height, zoom, centerlat, centerlon);
            }
        }

        
    public static void calculateMercatorScreemLocation(Element element, int dx, int dy, int viewportWidth, int viewportHeight, int zoom, double centerlat, double centerlon) {
            
    if (element instanceof Group) {
                List children 
    = element.getChildren();
                Iterator it 
    = children.iterator();
                
    while (it.hasNext()) {
                    Element child 
    = (Element) it.next();
                    calculateMercatorScreemLocation(child, dx, dy, viewportWidth, viewportHeight, zoom, centerlat, centerlon);
                }
            }
            GeoCoordinate coord 
    = element.getGeoCoordinate();
            
    if (coord != null) {
                Point centerPoint 
    = element.getCenterLocation();
                
    int x = (int) centerPoint.getX() + dx;
                
    int y = (int) centerPoint.getY() + dy;
                Point screenPoint 
    = new Point(x, y);
                GeoCoordinate currentCenterGeoPoint 
    = new GeoCoordinate(centerlon,centerlat);
                GeoCoordinate elementGeo 
    = GisToolkits.getMercatorGeoPointByScreenPoint(screenPoint,currentCenterGeoPoint,zoom,viewportWidth, viewportHeight);
                element.setGeoCoordinate(
    new GeoCoordinate(elementGeo.getLongitude(), elementGeo.getLatitude()));
            }
        }

    當然數據節點必須賦值上經緯度信息,這里省略了相關代碼。

    4)配置后臺Servlet

    完成后。就可以部署調試了。



    Feedback

    # re: TWaverSVG 結合 GoogleMap  回復  更多評論   

    2009-10-30 23:16 by 林小加
    twaver+googlemap = 邏輯圖+物理圖,強!

    # re: TWaverSVG 結合 GoogleMap  回復  更多評論   

    2009-11-02 22:56 by gxlx
    twaver還有GIS功能?我們公司買的版本怎么沒有?

    # re: TWaverSVG 結合 GoogleMap[未登錄]  回復  更多評論   

    2009-11-03 12:04 by javarunway
    這個GIS是要單獨買的吧?
    主站蜘蛛池模板: 久久不见久久见免费影院| 国产免费一区二区视频| 真人做人试看60分钟免费视频| 亚洲乱码一区二区三区在线观看| 一级特黄色毛片免费看| 亚洲精品黄色视频在线观看免费资源| 91青青青国产在观免费影视| 日韩精品视频免费网址| 久久精品国产99国产精品亚洲| 中文字幕不卡免费视频| 国产亚洲一区二区三区在线| 免费一级不卡毛片| 久久亚洲AV成人无码| 91香蕉成人免费网站| 亚洲 欧洲 日韩 综合在线| 夭天干天天做天天免费看| 亚洲av成人片在线观看| 伊人久久亚洲综合影院| 亚洲国产精品综合一区在线| 亚洲视频免费一区| 亚洲精品亚洲人成在线| 大地资源在线观看免费高清| 含羞草国产亚洲精品岁国产精品| 免费人成在线观看网站视频| 成人无码区免费A∨直播| 久久久久亚洲精品日久生情| 处破痛哭A√18成年片免费| 老司机午夜性生免费福利 | 亚洲成av人片在www鸭子| 亚洲AV无码乱码在线观看牲色| a毛片成人免费全部播放| 亚洲黄色免费网站| 日韩成人在线免费视频| a级片免费在线观看| 久久精品国产亚洲AV忘忧草18| 亚洲国产精品碰碰| 日本最新免费网站| 一级做a爰片久久毛片免费看| 久久亚洲国产精品成人AV秋霞| 国产一级一片免费播放| 99久久人妻精品免费二区|