Esempio n. 1
0
static void do_test_mindistance2d_tolerance(char *in1, char *in2, double expected_res)
{
	LWGEOM *lw1;
	LWGEOM *lw2;
	double distance;

	lw1 = lwgeom_from_wkt(in1, LW_PARSER_CHECK_NONE);
	lw2 = lwgeom_from_wkt(in2, LW_PARSER_CHECK_NONE);

	distance = lwgeom_mindistance2d_tolerance(lw1, lw2, 0.0);
	CU_ASSERT_EQUAL(distance, expected_res);
	lwgeom_free(lw1);
	lwgeom_free(lw2);

}
Esempio n. 2
0
/**
	Function handling 3d min distance calculations and dwithin calculations.
	The difference is just the tolerance.
*/
double
lwgeom_mindistance3d_tolerance(const LWGEOM *lw1, const LWGEOM *lw2, double tolerance)
{
	if(!lwgeom_has_z(lw1) || !lwgeom_has_z(lw2))
	{
		lwnotice("One or both of the geometries is missing z-value. The unknown z-value will be regarded as \"any value\"");
		
		return lwgeom_mindistance2d_tolerance(lw1, lw2, tolerance);	
	}
	DISTPTS3D thedl;
	LWDEBUG(2, "lwgeom_mindistance3d_tolerance is called");
	thedl.mode = DIST_MIN;
	thedl.distance= FLT_MAX;
	thedl.tolerance = tolerance;
	if (lw_dist3d_recursive(lw1, lw2, &thedl))
	{
		return thedl.distance;
	}
	/*should never get here. all cases ought to be error handled earlier*/
	lwerror("Some unspecified error.");
	return FLT_MAX;
}
Esempio n. 3
0
void test_mindistance2d_tolerance(void)
{
	LWGEOM_PARSER_RESULT gp1;
	LWGEOM_PARSER_RESULT gp2;
	double distance;
	int result1, result2;

	/*
	** Simple case.
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "POINT(0 0)", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "MULTIPOINT(0 1.5,0 2,0 2.5)", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("\ndistance #1 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 1.5);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

	/*
	** Point vs Geometry Collection.
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "POINT(0 0)", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "GEOMETRYCOLLECTION(POINT(3 4))", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("distance #2 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 5.0);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

	/*
	** Point vs Geometry Collection Collection.
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "POINT(0 0)", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4)))", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("distance #3 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 5.0);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

	/*
	** Point vs Geometry Collection Collection Collection.
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "POINT(0 0)", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4))))", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("distance #4 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 5.0);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

	/*
	** Point vs Geometry Collection Collection Collection Multipoint.
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "POINT(0 0)", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(MULTIPOINT(3 4))))", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("distance #5 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 5.0);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

	/*
	** Geometry Collection vs Geometry Collection
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "GEOMETRYCOLLECTION(POINT(0 0))", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "GEOMETRYCOLLECTION(POINT(3 4))", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("distance #6 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 5.0);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

	/*
	** Geometry Collection Collection vs Geometry Collection Collection
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(3 4)))", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("distance #7 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 5.0);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

	/*
	** Geometry Collection Collection Multipoint vs Geometry Collection Collection Multipoint
	*/
	result1 = serialized_lwgeom_from_ewkt(&gp1, "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(MULTIPOINT(0 0)))", PARSER_CHECK_NONE);
	result2 = serialized_lwgeom_from_ewkt(&gp2, "GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(MULTIPOINT(3 4)))", PARSER_CHECK_NONE);
	distance = lwgeom_mindistance2d_tolerance(gp1.serialized_lwgeom, gp2.serialized_lwgeom, 0.0);
	//printf("distance #8 = %g\n",distance);
	CU_ASSERT_EQUAL(distance, 5.0);
	free(gp1.serialized_lwgeom);
	free(gp2.serialized_lwgeom);

}
Esempio n. 4
0
/**
	Function initialazing min distance calculation
*/
double
lwgeom_mindistance2d(LWGEOM *lw1, LWGEOM *lw2)
{
	LWDEBUG(2, "lwgeom_mindistance2d is called");
	return lwgeom_mindistance2d_tolerance( lw1, lw2, 0.0 );
}