地图算法(三):判断当前点是不是在该矩形上

本文探讨地图算法中的一个重要问题——如何判断一个给定点是否位于矩形边界上。通过详细解析算法实现,帮助理解地理信息系统(GIS)中的几何运算。
import java.io.PrintStream;
//矩形区域计算
public class RectangleAreaJudgeTest {
    private float maxX = 0.0F;
    private float minX = 0.0F;
    private float maxY = 0.0F;
    private float minY = 0.0F;

    public RectangleAreaJudge(String points) {
        create(points);
    }

    public void create(String points) {
        String[] pointsArray = points.split(";");

        float x1 = Float.parseFloat(pointsArray[0].split(",")[0]);
        float y1 = Float.parseFloat(pointsArray[0].split(",")[1]);
        float x2 = Float.parseFloat(pointsArray[2].split(",")[0]);
        float y2 = Float.parseFloat(pointsArray[2].split(",")[1]);
        System.out.println(x1 + "--" + y1 + "--" + x2 + "---" + y2);
        if (x1 > x2) {
            this.maxX = x1;
            this.minX = x2;
        } else {
            this.maxX = x2;
            this.minX = x1;
        }
        if (y1 > y2) {
            this.maxY = y1;
            this.minY = y2;
        } else {
            this.maxY = y2;
            this.minY = y1;
        }
    }

    public String cutDot(String s) {
        int dot = s.indexOf(".");
        if (dot < 0) {
            return s;
        }
        return s.substring(0, dot) + s.substring(dot + 1, s.length());
    }

    public boolean isInArea(String x, String y) {
        float ix = Float.parseFloat(x);
        float iy = Float.parseFloat(y);

        if ((ix >= this.minX) && (ix <= this.maxX) && (iy >= this.minY) && (iy <= this.maxY)) {
            return true;
        }

        return false;
    }

    public boolean isInArea(double x, double y) {
        if ((x >= this.minX) && (x <= this.maxX) && (y >= this.minY) && (y <= this.maxY)) {
            return true;
        }

        return false;
    }

    public static void main(String[] args) {
        RectangleAreaJudge area = new RectangleAreaJudge("118.126592,30.130026;119.213014,31.139031");

        area = new RectangleAreaJudge("113.18389892578125,23.046248208393926;113.41529846191406,23.18013237070759");
        System.out.println(area.isInArea("113.2626", "23.146577"));
    }
}
#define geo_max(a,b) (((a) > (b)) ? (a) : (b)) #define geo_min(a,b) (((a) < (b)) ? (a) : (b)) GEO_EXPORT mappoint geo_trangeo2map(georect* grt, geopoint* pt, maprect* mrt); GEO_EXPORT geopoint geo_tranmap2geo(maprect* mrt, mappoint* mpt, georect* grt); /* *判断在不在矩形里.在返回0 * 不在返回-1 */ GEO_EXPORT int geo_gptingrt(geopoint* gpt, georect* grt); GEO_EXPORT int geo_mptinmrt(mappoint* mpt, maprect* mrt); GEO_EXPORT geobool geo_gptingpolygon(geopoint* gpt, geopoints *gpts); /* *返回单位为:米 */ GEO_EXPORT double geo_distance(geopoint* gptfrom, geopoint* gptto); GEO_EXPORT double geo_distance_pt2polyline(geopoint* gpt, geopoints* gpts, geopoint* rnearestpt); GEO_EXPORT double geo_distance_pt2polygon(geopoint* gpt, geopoints* gpts, geopoint* rnearestpt); /* *返回单位为:平方米 */ //GEO_EXPORT double geo_area(geopoints* gpts); /* *返回单位为:度 *正北为0度,顺时针为正 */ GEO_EXPORT double geo_direction(geopoint* gptfrom, geopoint* gptto); /* * 矩形矩形的关系 * a 在 b 里面, 返回 0 * a 部份在 b 里面,返回 1 * a 没和 b 相交, 返回 -1 * /\ y * | * | * | * |------------> x * o */ int geo_grtingrt(georect* rta, georect* rtb); /* * 矩形矩形的关系 * a 在 b 里面, 返回 0 * a 部份在 b 里面,返回 1 * a 没和 b 相交, 返回 -1 * * o * |------------> x * | * | * | * | * \/ y */ int geo_mrtinmrt(maprect* rta, maprect* rtb); //判断线段是否相关 //相交返回GEO_TRUE //不相交返回GEO_FALSE geobool geo_linecrossline(geopoint* lafrom, geopoint* lato, geopoint* lbfrom, geopoint* lbto); /* * 多边形与多边形的关系 * a 在 b 里面, 返回 0 * a 和 b 相交,返回 1 * a 没和 b 相交, 返回 -1 * b 在 a 里面, 返回 -2 * * /\ y * | * | * | * |------------> x * o */ int geo_gpolygoningpolygon(geopoints* gptsa, geopoints* gptsb);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值