Google maps 根据google.maps.Polygon的中心点和尺寸绘制一个矩形

Google maps 根据google.maps.Polygon的中心点和尺寸绘制一个矩形,google-maps,google-maps-api-3,polygon,Google Maps,Google Maps Api 3,Polygon,我正在编写一个PHP脚本,它接受XML输入,解析它,然后显示(最终旋转)矩形和椭圆区域 因为区域可以旋转,所以我必须使用google.maps.Polygon而不是Rectangle 要处理旋转,我希望使用库(该部分稍后提供) 我的问题是:从给定的XML输入中,我只知道矩形中心点的坐标和区域的尺寸(宽度和高度) 当前,我仅将中心点显示为标记: 我的问题是:当只有中心点的纬度和经度以及宽度和高度已知时,如何使用google.maps.Polygon绘制矩形 即,如何计算4个端点的纬度和经度 我可

我正在编写一个PHP脚本,它接受XML输入,解析它,然后显示(最终旋转)矩形和椭圆区域

因为区域可以旋转,所以我必须使用
google.maps.Polygon
而不是
Rectangle

要处理旋转,我希望使用库(该部分稍后提供)

我的问题是:从给定的XML输入中,我只知道矩形中心点的坐标和区域的尺寸(宽度和高度)

当前,我仅将中心点显示为标记:

我的问题是:当只有中心点的纬度和经度以及宽度和高度已知时,如何使用
google.maps.Polygon
绘制矩形

即,如何计算4个端点的纬度和经度


我可以在这里使用这个方法吗?

一个选项是使用v3端口版本的

工作代码段:

var-map=null;
函数初始化(){
变量myOptions={
缩放:8,
中心:新google.maps.LatLng(44,-78),
mapTypeControl:true,
mapTypeControlOptions:{
样式:google.maps.MapTypeControlStyle.DROPDOWN_菜单
},
导航控制:对,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById(“map”),
肌肽);
//==-倾斜矩形===
var point=new google.maps.LatLng(44,-78);
var tiltedRectangle1=google.maps.Polygon.Shape(点,50000,10000,50000,10000,-60,4,“#000000”,3,1,“#ffffff”,1,{},true);
var tiltedRectangle2=google.maps.Polyline.Shape(点,50000,10000,50000,10000,30,4,#000000,3,1,{},true);
倾斜角度1.设置地图(地图);
倾斜角度2.设置地图(地图);
}
google.maps.event.addDomListener(窗口“加载”,初始化);
//EShapes.js
//
//基于“thetoy”的一个想法和几行代码
//
//此Javascript由Mike Williams提供
//社区教会Javascript团队
//   http://www.bisphamchurch.org.uk/   
//   http://econym.org.uk/gmap/
//
//本作品根据知识共享许可证获得许可
//   http://creativecommons.org/licenses/by/2.0/uk/
//
//版本0.0 04/Apr/2008尚未完成
//版本1.0 2008年4月10日首次发布
//Lawrence Ross于2011年10月12日将版本3.0移植到v3
google.maps.Polyline.Shape=函数(点、r1、r2、r3、r4、旋转、顶点计数、颜色、权重、不透明度、选项、倾斜){
如果(!颜色){
color=“#0000FF”;
}
如果(!重量){
重量=4;
}
如果(!不透明度){
不透明度=0.45;
}
var rot=-rotation*Math.PI/180;
var点=[];
var latConv=google.maps.geometry.sphereal.ComputedIstanceBeween(point,新的google.maps.LatLng(point.lat()+0.1,point.lng())*10;
var lngConv=google.maps.geometry.sphereal.ComputedDistanceBeween(point,new google.maps.LatLng(point.lat(),point.lng()+0.1))*10;
var阶跃=(360/顶点计数)| 10;
var-flop=-1;
如果(倾斜){
var I1=180/垂直计数;
}否则{
var I1=0;
}

对于(var i=I1;i一个选项是使用v3端口版本的

工作代码段:

var-map=null;
函数初始化(){
变量myOptions={
缩放:8,
中心:新google.maps.LatLng(44,-78),
mapTypeControl:true,
mapTypeControlOptions:{
样式:google.maps.MapTypeControlStyle.DROPDOWN_菜单
},
导航控制:对,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById(“map”),
肌肽);
//==-倾斜矩形===
var point=new google.maps.LatLng(44,-78);
var tiltedRectangle1=google.maps.Polygon.Shape(点,50000,10000,50000,10000,-60,4,“#000000”,3,1,“#ffffff”,1,{},true);
var tiltedRectangle2=google.maps.Polyline.Shape(点,50000,10000,50000,10000,30,4,#000000,3,1,{},true);
倾斜角度1.设置地图(地图);
倾斜角度2.设置地图(地图);
}
google.maps.event.addDomListener(窗口“加载”,初始化);
//EShapes.js
//
//基于“thetoy”的一个想法和几行代码
//
//此Javascript由Mike Williams提供
//社区教会Javascript团队
//   http://www.bisphamchurch.org.uk/   
//   http://econym.org.uk/gmap/
//
//本作品根据知识共享许可证获得许可
//   http://creativecommons.org/licenses/by/2.0/uk/
//
//版本0.0 04/Apr/2008尚未完成
//版本1.0 2008年4月10日首次发布
//Lawrence Ross于2011年10月12日将版本3.0移植到v3
google.maps.Polyline.Shape=函数(点、r1、r2、r3、r4、旋转、顶点计数、颜色、权重、不透明度、选项、倾斜){
如果(!颜色){
color=“#0000FF”;
}
如果(!重量){
重量=4;
}
如果(!不透明度){
不透明度=0.45;
}
var rot=-rotation*Math.PI/180;
var点=[];
var latConv=google.maps.geometry.sphereal.ComputedIstanceBeween(point,新的google.maps.LatLng(point.lat()+0.1,point.lng())*10;
var lngConv=google.maps.geometry.sphereal.ComputedDistanceBeween(point,new google.maps.LatLng(point.lat(),point.lng()+0.1))*10;
var阶跃=(360/顶点计数)| 10;
var-flop=-1;
如果(倾斜){
var I1=180/垂直计数;
}否则{
var I1=0;
}
对于(var i=I1;i我自己的答案(参见下面的屏幕截图)-首先添加
几何体
库:

<script type="text/javascript" 
    src="https://maps.googleapis.com/maps/api/js?v=3&libraries=geometry">
</script>

要将矩形旋转
角度
我可能可以将其添加到
computeOffset()
调用的第二个参数中。还没有尝试过。我自己的答案(请参见下面的屏幕截图)-首先添加
几何体
库:

<script type="text/javascript" 
    src="https://maps.googleapis.com/maps/api/js?v=3&libraries=geometry">
</script>

若要将矩形旋转
角度
,我可能可以将其添加到
var NORTH = 0;
var WEST  = -90;
var SOUTH = 180;
var EAST  = 90;

function drawRect(map, lat, lng, width, height, color) {

        var center = new google.maps.LatLng(lat, lng);

        var north = google.maps.geometry.spherical.computeOffset(center, height / 2, NORTH); 
        var south = google.maps.geometry.spherical.computeOffset(center, height / 2, SOUTH); 

        var northEast = google.maps.geometry.spherical.computeOffset(north, width / 2, EAST); 
        var northWest = google.maps.geometry.spherical.computeOffset(north, width / 2, WEST); 

        var southEast = google.maps.geometry.spherical.computeOffset(south, width / 2, EAST); 
        var southWest = google.maps.geometry.spherical.computeOffset(south, width / 2, WEST); 

        var corners = [ northEast, northWest, southWest, southEast ];

        var rect = new google.maps.Polygon({
                paths: corners,
                strokeColor: color,
                strokeOpacity: 0.9,
                strokeWeight: 1,
                fillColor: color,
                fillOpacity: 0.3,
                map: map
        });
}