要求:在一张经度为-180~180,纬度为-90~90(经纬度都保留6位小数)的平面地图上,根据任意给定的点(三个及三个以上)算出区域,然后再任意指定一个点,判断此点是否在该区域内,用java代码怎么实现呢,希望牛人能帮忙解答下,谢谢!
------------------------------------------------------------------------------------------------------------------
问题补充:
mavlarn 写道
为了简单点,每个点都当成int类型,也就是乘以1百万,这样,判断两个点是否在一个区域,就很容易判断啊,除以某一个值(区间个数),看看结果是否相等。
判断两个点是否在一个区域内?不理解你说的意思
完善下问题,因为三个及三个以上的经纬度构成的点,才能组成一封闭的区域,然后判断任意一点是否在其区域内(包括边界),楼上大哥说的方法感觉行不通啊
------------------------------------------------------------------------------------------------------------------
问题补充:
likedier 写道
使用第三方jar包 jts包 例子如下面
//一个面所包含的经纬度(标准的经纬*3600000)
String str = "POLYGON ((419164412
143703543, 419164481 143702737, 419164494 143702527,419164412
143703543))";
WKTReader wkt = new WKTReader();
Geometry geojudge1 = wkt.read(str);
int xpoi = 419164481;
int ypoi = 143702737;
Geometry geojudge2 = wkt.read("POINT(" +
xpoi + " " + ypoi + "))");
if(geojudge1.intersects(geojudge2)) {
System.out.println("xpoi、ypoi 在这个面里");
}
ps:在构成一个面的时候,第一个点的经纬度一定要与最后一个点的经纬度相同。否则会报错误:java.lang.IllegalArgumentException:
points must form a closed linestring
-------------------------
红色的地方是固定写法吗?我现在的经纬度格式如:103854.660414,191724.002882;
那我程序中是不是也可以这样写?不是很懂下面代码:
String str = "POLYGON ((103854.660414,191724.002882,
110662.694056,195827.911012,.....))
像我要判断的点(checkpoint:110662.694056,191724.002882)也是上面的格式,用geojudge1.intersects(geojudge2))
会有问题?
标准的经纬*3600000,是什么意思啊, 希望大哥能多多指教,感谢!同时也感谢其他的回答,谢谢!
------------------------------------------------------------------------------------------------------------------
问题补充:
likedier 写道
使用第三方jar包 jts包 例子如下面
//一个面所包含的经纬度(标准的经纬*3600000)
String str = "POLYGON ((419164412 143703543, 419164481 143702737,
419164494 143702527,419164412 143703543))";
WKTReader wkt = new WKTReader();
Geometry geojudge1 = wkt.read(str);
int xpoi = 419164481;
int ypoi = 143702737;
Geometry geojudge2 = wkt.read("POINT(" + xpoi + " " + ypoi +
"))");
if(geojudge1.intersects(geojudge2)) {
System.out.println("xpoi、ypoi 在这个面里");
}
ps:在构成一个面的时候,第一个点的经纬度一定要与最后一个点的经纬度相同。否则会报错误:java.lang.IllegalArgumentException:
points must form a closed linestring
问题补充下:
String str = "POLYGON ((419164412 143703543, 419164481 143702737,
419164494 143702527,419164412 143703543))";
上面这些经纬度对是有顺序要求的吧?
------解决方案--------------------------------------------------------
为了简单点,每个点都当成int类型,也就是乘以1百万,这样,判断两个点是否在一个区域,就很容易判断啊,除以某一个值(区间个数),看看结果是否相等。
------解决方案--------------------------------------------------------
使用第三方jar包 jts包 例子如下面
//一个面所包含的经纬度(标准的经纬*3600000)
String str = "POLYGON ((419164412 143703543, 419164481 143702737,
419164494 143702527,419164412 143703543))";
WKTReader wkt = new WKTReader();
Geometry geojudge1 = wkt.read(str);
int xpoi = 419164481;
int ypoi = 143702737;
Geometry geojudge2 = wkt.read("POINT(" + xpoi + " " + ypoi +
"))");
if(geojudge1.intersects(geojudge2)) {
System.out.println("xpoi、ypoi 在这个面里");
}
ps:在构成一个面的时候,第一个点的经纬度一定要与最后一个点的经纬度相同。否则会报错误:java.lang.IllegalArgumentException:
points must form a closed linestring
------解决方案--------------------------------------------------------
这个点朝任意方向画一条射线(比如正东方,比较好算)
然后看这个多边型有奇数还是偶数条边与这条射线相交。
------解决方案--------------------------------------------------------
可参考:
编写一个java程序,能够检查给定的java类文件是否正确解决思路 http://www.myexception.cn/java-other/355013.html