2011-11-16 1 views
0

JavaScript에 익숙하지 않으므로 도움을 많이 받으실 수 있습니다. 나는 구글지도의 예를 함께 일하고 있어요Google지도 API - 텍스트 상자에 여러 도형의 경도 및 위도 표시

은 - http://gmaps-samples.googlecode.com/svn/trunk/poly/mymapstoolbar.html

이 완벽하게 작동하지만 내가 뭘하고 싶은 것은 생성 된 모든 형태의 latlongs을 표시하는 것입니다 (현재 만 마커에 대한 latlong 표시) .

Line 및 Shape km 정보를 표시하는 대신 polygon/shape/line이 생성되는 즉시 텍스트 상자에 latlongs를 표시하고 싶습니다.

자바 스크립트 수정을 시도하고 Google 문서를 확인했지만 페이지에서 오류가 발생했습니다.

감사합니다. 아래 한 후

편집

코드는 그것을 할 수있는 여러 가지 방법이 있습니다

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<!-- saved from url=(0069)http://gmaps-samples.googlecode.com/svn/trunk/poly/mymapstoolbar.html --> 
<!-- 
Copyright 2008 Google Inc. 
Licensed under the Apache License, Version 2.0: 
http://www.apache.org/licenses/LICENSE-2.0 
--><HTML 
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>Google Maps JavaScript API Example: Editable Polylines</TITLE> 
<META content="text/html; charset=utf-8" http-equiv=content-type> 
<SCRIPT type=text/javascript 
src="Google%20Maps%20JavaScript%20API%20Example%20Editable%20Polylines_files/maps"></SCRIPT> 

<STYLE type=text/css>BODY { 
    FONT-FAMILY: Arial, sans serif; FONT-SIZE: 11px 
} 
#hand_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Bsu.png); WIDTH: 31px; HEIGHT: 31px 
} 
.selected#hand_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Bsd.png) 
} 
#placemark_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Bmu.png); WIDTH: 31px; HEIGHT: 31px 
} 
.selected#placemark_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Bmd.png) 
} 
#line_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Blu.png); WIDTH: 31px; HEIGHT: 31px 
} 
.selected#line_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Bld.png) 
} 
#shape_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Bpu.png); WIDTH: 31px; HEIGHT: 31px 
} 
.selected#shape_b { 
    BACKGROUND-IMAGE: url(http://google.com/mapfiles/ms/t/Bpd.png) 
} 
</STYLE> 

<SCRIPT type=text/javascript> 
var COLORS = [["red", "#ff0000"], ["orange", "#ff8800"], ["green","#008000"], 
       ["blue", "#000080"], ["purple", "#800080"]]; 
var options = {}; 
var lineCounter_ = 0; 
var shapeCounter_ = 0; 
var markerCounter_ = 0; 
var colorIndex_ = 0; 
var featureTable_; 
var map; 

function select(buttonId) { 
    document.getElementById("hand_b").className="unselected"; 
    document.getElementById("shape_b").className="unselected"; 
    document.getElementById("line_b").className="unselected"; 
    document.getElementById("placemark_b").className="unselected"; 
    document.getElementById(buttonId).className="selected"; 
} 

function stopEditing() { 
    select("hand_b"); 
} 

function getColor(named) { 
    return COLORS[(colorIndex_++) % COLORS.length][named ? 0 : 1]; 
} 

function getIcon(color) { 
    var icon = new GIcon(); 
    icon.image = "http://google.com/mapfiles/ms/micons/" + color + ".png"; 
    icon.iconSize = new GSize(32, 32); 
    icon.iconAnchor = new GPoint(15, 32); 
    return icon; 
} 

function startShape() { 
    select("shape_b"); 
    var color = getColor(false); 
    var polygon = new GPolygon([], color, 2, 0.7, color, 0.2); 
    startDrawing(polygon, "Shape " + (++shapeCounter_), function() { 
    var cell = this; 
    var area = polygon.getArea(); 
    cell.innerHTML = (Math.round(area/10000)/100) + "km<sup>2</sup>"; 
}, color); 

// $("#controls_left").text(""); 
// for(var m=0; m<polygon.length; m++) { 
//  $("#controls_left").append("<textarea class='latlong'>" + polygon[m].getPoint().lat().toFixed(6) + "</textarea>"); 
//  $("#controls_left").append("<textarea class='latlong'>" + polygon[m].getPoint().lng().toFixed(6) + "</textarea>"); 

} 

function startLine() { 
    select("line_b"); 
    var color = getColor(false); 
    var line = new GPolyline([], color); 
    startDrawing(line, "Line " + (++lineCounter_), function() { 
    var cell = this; 
    var len = line.getLength(); 
    cell.innerHTML = (Math.round(len/10)/100) + "km"; 
    }, color); 
} 

function addFeatureEntry(name, color) { 
    currentRow_ = document.createElement("tr"); 
    var colorCell = document.createElement("td"); 
    currentRow_.appendChild(colorCell); 
    colorCell.style.backgroundColor = color; 
    colorCell.style.width = "1em"; 
    var nameCell = document.createElement("td"); 
    currentRow_.appendChild(nameCell); 
    nameCell.innerHTML = name; 
    var descriptionCell = document.createElement("td"); 
    currentRow_.appendChild(descriptionCell); 
    featureTable_.appendChild(currentRow_); 
    return {desc: descriptionCell, color: colorCell}; 
} 

function startDrawing(poly, name, onUpdate, color) { 
    map.addOverlay(poly); 
    poly.enableDrawing(options); 
    poly.enableEditing({ onEvent: "mouseover" }); 
    poly.disableEditing({ onEvent: "mouseout" }); 
    function() { 
     select("hand_b"); 
     var cells = addFeatureEntry(name, color); 
     updateDrawing(poly, cells); 
     GEvent.addListener(poly, "click", function (latlng, index) { 
      if (typeof index == "number") { 
       poly.deleteVertex(index); 
      } else { 
       var newColor = getColor(false); 
       cells.color.style.backgroundColor = newColor 
       poly.setStrokeStyle({ color: newColor, weight: 4 }); 
      } 
     }); 
    } 
} 



function placeMarker() { 
    select("placemark_b"); 
    var listener = GEvent.addListener(map, "click", function(overlay, latlng) { 
    if (latlng) { 
     select("hand_b"); 
     GEvent.removeListener(listener); 
     var color = getColor(true); 
     var marker = new GMarker(latlng, {icon: getIcon(color), draggable: true}); 
     map.addOverlay(marker); 
     var cells = addFeatureEntry("Placemark " + (++markerCounter_), color); 
     updateMarker(marker, cells); 
     GEvent.addListener(marker, "dragend", function() { 
     updateMarker(marker, cells); 
     }); 
     GEvent.addListener(marker, "click", function() { 
     updateMarker(marker, cells, true); 
     }); 
    } 
    }); 
} 

function updateMarker(marker, cells, opt_changeColor) { 
    if (opt_changeColor) { 
    var color = getColor(true); 
    marker.setImage(getIcon(color).image); 
    cells.color.style.backgroundColor = color; 
    } 
    var latlng = marker.getPoint(); 
    cells.desc.innerHTML = "(" + Math.round(latlng.y * 100)/100 + ", " + 
    Math.round(latlng.x * 100)/100 + ")"; 
} 


function updateDrawing(poly, cells) { 
    var text = "("; 
    for (var i = 0; i < poly.getVertexCount(); i++) { 
     if (i > 0) 
      text = text + "; "; 
     var latlng = poly.getVertex(i); 
     text = text + Math.round(latlng.y * 100)/100 + ", " + Math.round(latlng.x * 100)/100; 
    } 
    cells.desc.innerHTML = text + ")"; 
} 


function initialize() { 
    if (GBrowserIsCompatible()) { 
    map = new GMap2(document.getElementById("map")); 
    map.setCenter(new GLatLng(37.4419, -122.1419), 13); 
    map.addControl(new GSmallMapControl()); 
    map.addControl(new GMapTypeControl()); 
    map.clearOverlays(); 
    featureTable_ = document.getElementById("featuretbody"); 
    select("hand_b"); 
    } 
} 

    </SCRIPT> 

<META name=GENERATOR content="MSHTML 8.00.6001.19154"></HEAD> 
<BODY onunload=GUnload onload=initialize()> 
<TABLE> 
    <TBODY> 
    <TR style="VERTICAL-ALIGN: top"> 
    <TD style="WIDTH: 15em"> 
     <TABLE> 
     <TBODY> 
     <TR> 
      <TD> 
      <DIV id=hand_b onclick=stopEditing()>Move</DIV></TD> 
      <TD> 
      <DIV id=placemark_b onclick=placeMarker()>Marker</DIV></TD> 
      <TD> 
      <DIV id=line_b onclick=startLine()>Line</DIV></TD> 
      <TD> 
      <DIV id=shape_b 
     onclick=startShape()>Polygon</DIV></TD></TR></TBODY></TABLE><INPUT 
     id=featuredetails type=hidden rows="2"> </INPUT> 
     <P>To draw on the map, click on one of the buttons and then click on the 
     map. Double-click to stop drawing a line or shape. Click on an element to 
     change color. To edit a line or shape, mouse over it and drag the points. 
     Click on a point to delete it. </P> 
     <TABLE id=featuretable> 
     <TBODY id=featuretbody></TBODY></TABLE></TD> 
    <TD><!-- The frame used to measure the screen size --> 
     <DIV id=frame></DIV> 
     <DIV style="WIDTH: 600px; HEIGHT: 600px" 
id=map></DIV></TD></TR></TBODY></TABLE> 

    <DIV id=controls_left </DIV> 
    </BODY></HTML> 
+0

올바른 설명서를 확인 했습니까? 이 예는 공식적으로 사용되지 않는 Google Maps API v2에서 빌드됩니다. API v3에서 중요한 변경 사항이 있었으며 두 버전은 호환되지 않습니다. – Tomik

+0

@ Tomik : 예 v3 API도 살펴 봤지만 여러 도형의 텍스트 상자에 lat long을 표시하는 데는 아무 것도 없습니다. 어떤 제안을 해주시겠습니까? –

답변

1

변경합니다. 여기서 중요한 점은 폴리 라인/폴리곤 정점의 좌표를 얻는 것입니다. 이를 수행하려면 getVertexCount()getVertex(index:Number) 함수를 GPolyline/GPolygon 개체로 사용하십시오.

이제 updateMarker() 기능에서 영감을 받아 만들 수 있습니다

function updateDrawing(poly, cells) { 
    var text = "("; 
    for(var i=0; i<poly.getVertexCount(); i++) { 
     if(i > 0) 
     text = text + "; "; 
     var latlng = poly.getVertex(i); 
     text = text + Math.round(latlng.y * 100)/100 + ", " + Math.round(latlng.x * 100)/100; 
    } 
    cells.desc.innerHTML = text + ")"; 
} 

을 그리고 startDrawing() 함수에서 endline 이벤트 리스너 변경 : lineupdated 이벤트 리스너가 텍스트를 방지하기 위해 제거

function() { 
    select("hand_b"); 
    var cells = addFeatureEntry(name, color); 
    updateDrawing(poly, cells); 
    GEvent.addListener(poly, "click", function(latlng, index) { 
     if (typeof index == "number") { 
     poly.deleteVertex(index); 
     } else { 
     var newColor = getColor(false); 
     cells.color.style.backgroundColor = newColor 
     poly.setStrokeStyle({color: newColor, weight: 4}); 
     } 
    }); 
} 

영역/길이로 다시 변경하십시오.

+0

도움을 주셔서 대단히 감사합니다. 위의 변경을 한 후에는 웹 페이지에 아무 것도 표시하지 않습니다. 내가 틀린 일을했다면 내 전체 HTML 코드를 보시기 바랍니다. 당신의 도움은 많이 감사합니다! –

+1

글쎄요, 두 가지 문제가 있습니다. 첫째, Google Maps API를로드하기위한 스크립트 태그가 없습니다. 두 번째로'endline' 이벤트 리스너를 제거했지만 핸들러 함수를 변경해야합니다 : GEvent.addListener (poly, endline ", PLACE_THE_FUNCTION_I_WROTE_HERE)'. – Tomik

+0

너 정말 많이 - 너는 스타 야 !!!! –

관련 문제