gpt4 book ai didi

mysql - 查找特定角度附近的位置 - 在圆形查询中仅考虑前面的半圆而不是后面

转载 作者:行者123 更新时间:2023-11-29 12:39:10 27 4
gpt4 key购买 nike

我知道如何使用圆半径查询从 MySQL 数据库中查找附近的位置,并且我也在另一个 SO 问题上给出了相同的答案 here .

但我现在想做一些不同的事情。这里发生的情况是查询返回从点中心开始的结果,其中包括整个半径圆。我希望只得到半圆的分数。我知道这是可能的,而且都是数学计算,而我在这方面有点弱,这就是为什么寻求专家帮助。

看到这张图片,它会给出非常清晰的想法。 Only front part location is needed, not the back side part. Need to ignore the back side part.

正如您在图像中看到的那样,只需要前部位置,而不是后侧部分。需要忽略背面部分。此外,我还用不同的颜色划分了半径,使它们显示为区域 - 例如红色是区域 1,橙色是区域 2,黄色是区域 3。这是用于过滤数据(位置)的虚拟区域。

欢迎所有建议。

最佳答案

您可以使用半正弦/球余弦定律作为半径绘制线段内的点。然后使用 pointInPolygon() 只查找线段内的点。您还需要创建多边形的函数。

polySides = number of sides in polygon
pointLatArr = Lat of point in in polygon array
pointLngArr = Lng of point in in polygon array
dat.lat = Lat from Haversine results
dat.lng = Lng from Haversine results

if (pointInPolygonpolySides,pointLatArr,pointLngArr,dat.lat,dat.lng)){
var latlng = new google.maps.LatLng(dat.lat,dat.lng);
addMarker(latlng,dat.name);
bounds.extend(latlng);
}

function pointInPolygon(polySides,polyX,polyY,x,y) {
var j = polySides-1 ;
oddNodes = 0;
for (i=0; i<polySides; i++) {
if (polyY[i]<y && polyY[j]>=y || polyY[j]<y && polyY[i]>=y) {
if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x) {
oddNodes=!oddNodes;
}
}
j=i; }

return oddNodes;
}

线段多边形函数

function drawSegment(start,end,radius) { 
var d2r = Math.PI / 180;
pointLatArr = new Array();
pointLngArr = new Array();
polyLatLngs = new Array(); // latLngs of polygon
var polyLat = (radius /3963.189) / d2r; // miles
var polyLng = polyLat / Math.cos(center.lat() * d2r);
var centerLatLng = new google.maps.LatLng(center.lat(),center.lng());//Center to start
pointLatArr.push(center.lat());
pointLngArr.push(center.lng());
polyLatLngs.push(centerLatLng);
bounds.extend(centerLatLng);
// Create polygon points (extra point to close polygon)
for (var i = start; i < end; i++) {
// Convert degrees to radians
var theta = i * d2r;
var pointLat = center.lat() + (polyLat * Math.sin(theta));
var pointLng = center.lng() + (polyLng * Math.cos(theta));
var pointLatLng = new google.maps.LatLng(
parseFloat(pointLat), parseFloat(pointLng));
polyLatLngs.push(pointLatLng);
pointLatArr.push(pointLat);
pointLngArr.push(pointLng);
bounds.extend(pointLatLng);
}
var centerLatLng = new google.maps.LatLng(center.lat(),center.lng());//End to center
polyLatLngs.push(centerLatLng);
pointLatArr.push(center.lat());
pointLngArr.push(center.lng());
polySides = polyLatLngs.length;

使用这种技术的 map enter image description here }

参见Demo

关于mysql - 查找特定角度附近的位置 - 在圆形查询中仅考虑前面的半圆而不是后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26357159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com