如何检查所选区域的lat/lon是否在使用Java的数据库中定义的范围内
我有一个使用OpenLayers渲染地图的地图。通过在地图上选择一个区域,我们可以找到所选区域的lat/lon值。我有一个数据库中的数据,该数据库定义了特定车辆的lat/lon值。我想检查车辆是否位于我在地图上选择的区域内。在Java中如何实现这一点如何检查所选区域的lat/lon是否在使用Java的数据库中定义的范围内,java,postgresql,openlayers,Java,Postgresql,Openlayers,我有一个使用OpenLayers渲染地图的地图。通过在地图上选择一个区域,我们可以找到所选区域的lat/lon值。我有一个数据库中的数据,该数据库定义了特定车辆的lat/lon值。我想检查车辆是否位于我在地图上选择的区域内。在Java中如何实现这一点 (function () { var map, drawControls, boxLayer; function init() { map = new OpenLayers.Map('map');
(function () {
var map, drawControls, boxLayer;
function init() {
map = new OpenLayers.Map('map');
var wmsLayer = new OpenLayers.Layer.WMS("OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0?", {
layers: 'basic'
});
boxLayer = new OpenLayers.Layer.Vector("Box layer");
map.addLayers([wmsLayer, boxLayer]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
var box = new OpenLayers.Control.DrawFeature(boxLayer,
OpenLayers.Handler.RegularPolygon, {
handlerOptions: {
sides: 4,
irregular: true
},
callbacks: {
up: function (geom) {
console.log(geom);
alert(geom);
}
}
});
map.addControl(box);
box.activate();
map.setCenter(new OpenLayers.LonLat(0, 0), 3);
}
init();
})();
上面的提琴选择了地图上的一个区域,我有一个Postgres数据库,它有一个表track\u vehicle,其中包含vehicle\u id、latitude和longitude列。我想使用Java检查车辆的纬度和经度是否在地图上选择的范围内。纬度和经度是数字(正数表示东/南,负数表示西/北),因此您可以使用大于和小于运算检查点是否位于某个区域内 因此
66°33′39〃N
变成66033039
,而66°33′39〃S
变成-66033039
。只要把每一步都写成三位数的整数,你就会以九位数结束
public int degreesToInt(int degrees, int minutes, int seconds) {
NumberFormat nf = new DecimalFormat("000");
return Integer.valueOf(nf.format(degrees) +
nf.format(minutes) +
nf.format(seconds));
}
public boolean objectInArea(int vehicleLatitude, int vehicleLongitude,
int northLatitudeBorder, int southLatitudeBorder,
int westLongitudeBorder, int eastLongitudeBorder) {
if(westLongitudeBorder > eastLongitudeBorder) {
return objectInArea(vehicleLatitude, vehicleLongitude,
northLatitudeBorder, southLatitudeBorder,
-180000000,eastLongitudeBorder) ||
objectInArea(vehicleLatitude, vehicleLongitude,
northLatitudeBorder, southLatitudeBorder,
westLongitudeBorder,180000000);
}
return vehicleLongitude < eastLongitudeBorder &&
vehicleLongitude > westLongitudeBorder &&
vehicleLatitude < southLatitudeBorder &&
vehicleLatitude > northLatitudeBorder;
}
public int degreesToInt(int度、int分、int秒){
NumberFormat nf=新的十进制格式(“000”);
返回整数.valueOf(nf.格式(度)+
nf.格式(分钟)+
格式(秒);
}
公共布尔对象区域(int vehicleLatitude、int VehicleLength、,
内北向,内南向,
int西长订单、int东长订单){
if(西长订单>东长订单){
返回目标区域(车辆高度、车辆长度、,
北半球,南半球,
-180000000,东长订单)||
目标区域(车辆高度、车辆长度、,
北半球,南半球,
westLongitudeBorder,180000000);
}
返回车辆长度<东纵向订单&&
车辆长度>西部纵向订单&&
车辆高度<南纬度秩序&&
车辆高度>北纬度顺序;
}
你可能会问:“为什么是三位数而不是两位数?”
这将需要a)从Javascript获取地图缩放区域b)将区域服务器端发送到Java c)在DB上执行查询c)将车辆位置发送回客户端(如果在区域内)d)使用openLayers将车辆显示回地图。你确定这就是你想要的,因为它不会有效吗?问题是什么?如何进行空间查询,如何发回数据?二读:你一直说“Java”,但你的代码看起来像“JavaScript”。你知道这些是不同的语言,是吗?@Alexandros:先生,我也想这么做。但如果车辆位于所选区域,我只想将车辆ID发送到我的jsp页面。您在最后一步中提到,没有必要将其发送到带有openlayers的map。@AngeloNeuschitzer:是的,我知道它们是两种不同的语言。我刚刚在这里给出了地图代码。但是要根据db检查纬度和经度,如果我没有错的话,我需要java。