logo资料库

地理信息系统算法基础上机题目(java实现)..pdf

第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
资料共21页,剩余部分请下载后查看
GIS 基础算法 地理信息系统算法基础上机题目(java 实现) gis_lyh by 2013.4 目录 一、已知一线段 AB,在某个方向选择一点 P,输入距离 d,求线段 AB 延长距离 d 后的 点坐标; ................................................................................................................................... 2 二、判断两线段是否相交; ................................................................................................... 4 三、多边形重心计算; ........................................................................................................... 7 四、编程实现八方向矢量线栅格化; ................................................................................... 9 五、编程实现全路径矢量线栅格化; ................................................................................. 11 六、编程实现间隔取点法达到矢量数据的压缩; ............................................................. 13 七、求点 P(x,y)到线段 l 的最短距离; ................................................................................ 15 八、编写链式编码程序实现栅格数据的压缩; ................................................................. 17 九、编程:用垂距法实现矢量数据的压缩。 ..................................................................... 20 仅供参考---gis_lyh
GIS 基础算法 一、已知一线段 AB,在某个方向选择一点 P,输入距离 d, 求线段 AB 延长距离 d 后的点坐标; 1、 package gis.lyh.algorithm; 2、 import com.vividsolutions.jts.geom.*; 3、 4、 /** 5、 * 点到线段的距离 6、 * @author gis_lyh 7、 * 8、 */ 9、 public class PointDistSegment { 10、 11、 /** 12、 * @param args 13、 */ 14、 public static void main(String[] args) { 15、 16、 // TODO Auto-generated method stub Coordinate polyLine[]=new Coordinate[]{new Coordinate(0,0),new Coordinate(1,1)}; System.out.print(dist); Coordinate point=new Coordinate(2,3); double dist=PointToSegment(polyLine,point); 17、 18、 19、 20、 21、 } 22、 23、 /** 24、 * 点到线段的距离 25、 * @param polyLine 26、 * @param point 27、 * @return 28、 */ 29、 private static double PointToSegment(Coordinate[] polyLine, Coordinate point) 30、 { 31、 32、 33、 34、 35、 36、 37、 38、 double dist=0, a,b,c; a=Distance(polyLine[0],polyLine[1]); b=Distance(polyLine[0],point); c=Distance(polyLine[1],point); if(c<=0.000001||b<=0.000001) dist=0; if(a<=0.00001) 仅供参考---gis_lyh
GIS 基础算法 dist=b; dist=b; dist= c; return dist; if(b*b>=c*c+a*a) if(c*c>=a*a+b*b) double p=(a+b+c)/2; dist=2*Math.sqrt(p*(p-a)*(p-c)*(p-c))/a; 39、 40、 41、 42、 43、 44、 45、 46、 47、 48、 } 49、 50、 /** 51、 * 两断点的距离 52、 * @param coordinate 53、 * @param coordinate2 54、 * @return 55、 */ 56、 private static double Distance(Coordinate p1, Coordinate p2) 57、 { 58、 return Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); 59、 } 60、 } 仅供参考---gis_lyh
GIS 基础算法 二、判断两线段是否相交; package gis.lyh.algorithm; import com.vividsolutions.jts.geom.*; import com.vividsolutions.jts.io.WKTReader; /** * 使用叉积判断线段是否相交 * @author gis_lyh * */ public class LineIntersectLine { /** * @param args */ public static void main(String[] args) throws Exception { // 使用WKT读取文本创建几何体 WKTReader read=new WKTReader(); LineString polyLine1=(LineString)read.read("LINESTRING(0 0,5 5)"); LineString polyLine2=(LineString)read.read("LINESTRING(0 6,11 6)"); //分别获取线段两端点的值 Coordinate []coordinates=polyLine1.getCoordinates(); Coordinate p1=coordinates[0]; Coordinate p2= coordinates[1]; coordinates=polyLine2.getCoordinates(); Coordinate q1=coordinates[0]; Coordinate q2=coordinates[1]; //是否相互跨立 Boolean b=CrossMethod(p1,p2,q1,q2); if(b) System.out.println("线段相交。"); else System.out.println("线段不相交。"); } /** * 仅供参考---gis_lyh
GIS 基础算法 * @param p1 * @param p2 * @param q1 * @param q2 * @return 返回两个叉积 */ public static Boolean CrossMethod(Coordinate p1, Coordinate p2,Coordinate q1, Coordinate q2) { //判断两直线的最小外包矩阵是否相交 if(Envelope.intersects(p1, p2, q1, q2)) { double result1=ResultMethod(CutMethod(p1,q1),CutMethod(q2,q1),CutMethod(p2,q 1)); //System.out.println("result1:"+result1); double result2=ResultMethod(CutMethod(q1,p1),CutMethod(p2,p1),CutMethod(q2,p 1)); //System.out.println("result2:"+result2); if(result1<=0&&result2<=0) return true; else return false; } else return false; } /** * 计算叉积 * @param pCq1 * @param qCq * @param pCq2 * @return */ private static double ResultMethod(Coordinate pCq1, Coordinate qCq,Coordinate pCq2) { double result=(pCq1.x*qCq.y-qCq.x*pCq1.y)*(pCq2.x*qCq.y-qCq.x*pCq2.y); return result; } 仅供参考---gis_lyh
GIS 基础算法 /** * 矢量相减 * @param p1 * @param q1 * @return */ private static Coordinate CutMethod(Coordinate p1, Coordinate q1) { } Coordinate c=new Coordinate(); c.x=p1.x-q1.x; c.y=p1.y-q1.y; //System.out.println("c"+c); return c; } 仅供参考---gis_lyh
GIS 基础算法 三、多边形重心计算; package gis.lyh.algorithm; import com.vividsolutions.jts.geom.*; /** * 计算多边形的中心 * @author gis_lyh * */ public class ComputeCenter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Coordinate polygon[]=new Coordinate[]{new Coordinate(1,1),new Coordinate(2,2),new Coordinate(2,1),new Coordinate(1,1)}; Coordinate centerPoint=CenterMethod(polygon); System.out.print(centerPoint); } private static Coordinate CenterMethod(Coordinate[] polygon) { // TODO Auto-generated method stub Coordinate point=new Coordinate(); int i,j; double ai,atmp=0,xtmp=0,ytmp=0; if(polygon.length<3) return null; for(i=polygon.length-1,j=0;j
GIS 基础算法 } return point; } } 仅供参考---gis_lyh
分享到:
收藏