请教,Google地图绘制多边形..

269 views
Skip to first unread message

冯仕波

unread,
Nov 30, 2009, 11:51:11 PM11/30/09
to google-map...@googlegroups.com
现在需实现一工具按钮,该按钮在地图上绘制多变形,并能获取该多变形各个顶点坐标..如何计算该多边形的内切圆,外切园以及两者半径问题, 在网上未找到实例,还请各位帮忙看下怎么实现..先谢过..

--
F.M.O

fmo

unread,
Dec 1, 2009, 12:39:57 AM12/1/09
to 谷歌地图 API 论坛
现在需实现一工具按钮,该按钮在地图上绘制多变形,并能获取该多变形各个顶点坐标..如何计算该多边形的内切圆,外切园以及两者半径问题, 在网上未找
到实例只找到了效果(http://ditu.google.com/maps/mm 创建新地图 的工具中有绘制多边形,但看不了代码..555),
还请各位帮忙看下怎么实现..先谢过..

xiaoxi

unread,
Dec 2, 2009, 3:20:37 AM12/2/09
to 谷歌地图 API 论坛
绘制多边形可以参考:
http://code.google.com/apis/maps/documentation/overlays.html#Polylines_Overview
API参考:http://code.google.com/apis/maps/documentation/
reference.html#GPolyline

内切圆这些应该需要自己来计算了。

冯仕波

unread,
Dec 2, 2009, 8:26:16 PM12/2/09
to google-map...@googlegroups.com
恩,多谢您,我试了一下,但跟(http://ditu.google.com/maps/mm)这里的效果相差甚远,地图API中只提供了矩形区域的判定...方法如下:GPolygon
类 getBounds() GLatLngBounds 返回此多边形的边界。
.containsLatLng(latlng:GLatLng) Boolean 当且仅当该点的地理坐标位于此矩形内时,返回 true。
,但不知道如何判定已知一个坐标,是否在不规则多边形图形区域里面,希望各位帮忙指点给方向先..谢过.

xiaoxi

unread,
Dec 3, 2009, 6:13:05 AM12/3/09
to 谷歌地图 API 论坛
判定已知一个坐标,是否在不规则多边形图形区域里面,可以这样
通过这个坐标画一条水平线,如果该水平线与多边形的交点有(一个)或者(两个,并且该坐标的横坐标在这两点之间),说明该点在区域内。这一个或两个交点
应该不难求。

苒宝儿

unread,
Dec 8, 2009, 3:00:19 AM12/8/09
to 谷歌地图 API 论坛
有没有类似替代的绘图工具?

冯仕波

unread,
Dec 9, 2009, 8:03:10 PM12/9/09
to google-map...@googlegroups.com
写好了,感谢各位的回答,同时谢谢xiaoxi提供判定多边形内算法方向.具体可以用射线法判定,附上代码:/***
创建图形
@param index
*/
function create_Polygon(){
if(!check_init_map()){
alert("地图加载失败,请重新登陆.");
return;
}
var gploygon = new GPolygon([],"#f33f00",2, 1, "#ff0000", 0.2);
google_Map.addOverlay(gploygon); //并放如
gploygon.enableDrawing();
//会在第一个点处触发“endline”事件,否则,会触发“cancelline”事件,但是不会从地图上删除折线。
GEvent.addListener(gploygon, "endline", function () {
var temp_points = [];
var len = gploygon.getVertexCount();
for(var i = 0 ;i < len ;i++) {
var temp = gploygon.getVertex(i);
temp_points.push(temp.lat()+","+temp.lng());
}
var html = [];
html.push("<input type=\"button\"
onclick=\"add_ploygon_list("+ploygon_index+",'"+temp_points.join(";")+"')\"
value=\"保存\"/> <br/>");

// var len = gploygon.getVertexCount();
google_Map.openInfoWindowHtml(gploygon.getVertex(0), "<span
style='color:black'>"+ html.join("")+"</span>");
GEvent.addListener(gploygon, "click", function (latlng) {
google_Map.openInfoWindowHtml(latlng, "<span
style='color:black'>"+ html.join("")+"</span>");
});
GEvent.addListener(gploygon, "mouseover", function (latlng) {
gploygon.enableEditing();//允许编辑
});
GEvent.addListener(gploygon, "mouseout", function (latlng) {
gploygon.disableEditing();//允许编辑
});
});

}

Reply all
Reply to author
Forward
0 new messages