在一个点周围绘制多边形x米

编程入门 行业动态 更新时间:2024-10-27 08:29:38
本文介绍了在一个点周围绘制多边形x米的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

如何在给定点周围的给定点(纬度/经度)x米周围创建多边形(仅适用于我的情况)。这只是一个地理围栏的视觉表示,但我不需要计算一个点是否在地理围栏之外。我尝试使用下面的代码,但它创建一个矩形,而不是一个正方形,我甚至不知道1000米boudaries是否正确呈现。

How can I create a polygon(only a square in my case) around a given point(lat/lang) x meters around the given point. It's just a visual representation of a geofence but I dont need all the calculations whether a point is outside a geofence or not. I tried using the code below but its creating a rectangle instead of a square and I'm not even sure if the 1000 meter boudaries are being rendered correctly.

var map = new GMap2(document.getElementById("map_canvas")); map.setCenter(new GLatLng(37.4419, -122.1419), 13); map.addControl(new GSmallMapControl()); GEvent.addListener(map, 'click', function(overlay, latlng) { var lat = latlng.lat(); var lng = latlng.lng(); var height = 1000; //meters var width = 1000; //meters var polygon = new GPolygon( [ new GLatLng(lat + height / 2 * 90 / 10000000, lng + width / 2 * 90 / 10000000 / Math.cos(lat)), new GLatLng(lat - height / 2 * 90 / 10000000, lng + width / 2 * 90 / 10000000 / Math.cos(lat)), new GLatLng(lat - height / 2 * 90 / 10000000, lng - width / 2 * 90 / 10000000 / Math.cos(lat)), new GLatLng(lat + height / 2 * 90 / 10000000, lng - width / 2 * 90 / 10000000 / Math.cos(lat)), new GLatLng(lat + height / 2 * 90 / 10000000, lng + width / 2 * 90 / 10000000 / Math.cos(lat)) ], "#f33f00", 2, 1, "#ff0000", 0.2); map.addOverlay(polygon); });

推荐答案

我移植了 PHP函数来计算距离某个任意距离和方位的位置已知的位置,到Javascript:

I ported this PHP function to calculate the location an arbitrary distance and bearing from a known location, to Javascript:

var EARTH_RADIUS_EQUATOR = 6378140.0; var RADIAN = 180 / Math.PI; function calcLatLong(longitude, lat, distance, bearing) { var b = bearing / RADIAN; var lon = longitude / RADIAN; var lat = lat / RADIAN; var f = 1/298.257; var e = 0.08181922; var R = EARTH_RADIUS_EQUATOR * (1 - e * e) / Math.pow( (1 - e*e * Math.pow(Math.sin(lat),2)), 1.5); var psi = distance/R; var phi = Math.PI/2 - lat; var arccos = Math.cos(psi) * Math.cos(phi) + Math.sin(psi) * Math.sin(phi) * Math.cos(b); var latA = (Math.PI/2 - Math.acos(arccos)) * RADIAN; var arcsin = Math.sin(b) * Math.sin(psi) / Math.sin(phi); var longA = (lon - Math.asin(arcsin)) * RADIAN; return new GLatLng (latA, longA); }

我写了一个这个函数的实例,你可以检出( source )。

I have written a working example of this function that you can check out (source).

我使用毕达哥拉斯定理将平方的宽度翻译为半径,如果你想从中心使用一个简单的1000米半径,你可以这样做:

I use the Pythagorean Theorem to translate from a width of a square to a radius, if you want to use a simple 1000 meter radius from the center you can do that instead:

// this var radius = 1000; // instead of this var radius = (Math.sqrt (2 * (width * width))) / 2;

更多推荐

在一个点周围绘制多边形x米

本文发布于:2023-08-02 00:03:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1272893.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多边形

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!