#include <geos_c.h>
#include <stdio.h>
#include <stdlib.h>
#define WKT_FILE_PATH "./china.wtk"
// 初始化 GEOS 环境
void geos_init(GEOSContextHandle_t *ctx) {
*ctx = initGEOS_r(NULL, NULL);
}
// 清理 GEOS 环境
void geos_finish(GEOSContextHandle_t ctx) {
finishGEOS_r(ctx);
}
// 判断点是否在多边形内
int point_in_polygon(const char *wkt_point, const char *wkt_polygon) {
GEOSContextHandle_t ctx;
geos_init(&ctx);
// 创建点和多边形的几何对象
GEOSGeometry *point = GEOSGeomFromWKT_r(ctx, wkt_point);
GEOSGeometry *polygon = GEOSGeomFromWKT_r(ctx, wkt_polygon);
if (!point || !polygon) {
printf("Error creating geometries.\n");
geos_finish(ctx);
return -1;
}
// 判断点是否在多边形内
int result = GEOSWithin_r(ctx, point, polygon);
// 释放几何对象
GEOSGeom_destroy_r(ctx, point);
GEOSGeom_destroy_r(ctx, polygon);
geos_finish(ctx);
return result;
}
int get_wtk_from_file(char **buffer) {
FILE *file = fopen(WKT_FILE_PATH, "rb"); // 以二进制方式打开文件
if (file == NULL) {
perror("fopen failed");
return 1;
}
// 获取文件的大小
fseek(file, 0, SEEK_END);
long file_size = ftell(file);
fseek(file, 0, SEEK_SET); // 返回文件开始位置
// 使用 malloc 分配内存
*buffer = (char *)malloc(file_size + 1); // +1 为了存储字符串结束符 '\0'
if (buffer == NULL) {
perror("malloc failed");
fclose(file);
return -1;
}
// 读取文件内容到 buffer
size_t bytes_read = fread(*buffer, 1, file_size, file);
if (bytes_read != file_size) {
perror("fread failed");
free(*buffer);
fclose(file);
return -1;
}
// 确保字符串末尾有 '\0',如果是文本文件的话
(*buffer)[file_size] = '\0';
// 输出文件内容(可选)
//printf("File content:\n%s\n", buffer);
// 清理工作
fclose(file);
return 0;
}
int main() {
const char *wkt_point = "POINT(120.0 30.0)"; // 点的坐标 (经度 纬度)
char *wkt_polygon;
if (get_wtk_from_file(&wkt_polygon) == -1) return 1;
int is_inside = point_in_polygon(wkt_point, wkt_polygon);
if (is_inside) {
printf("Point is inside the polygon.\n");
} else {
printf("Point is outside the polygon.\n");
}
free(wkt_polygon);
return 0;
}
忆源
- 粉丝: 333
- 资源: 6
最新资源
- 【创新无忧】基于狮群优化算法LSO优化极限学习机ELM实现乳腺肿瘤诊断附matlab代码.rar
- 【创新无忧】基于狮群优化算法LSO优化极限学习机KELM实现故障诊断附matlab代码.rar
- 【创新无忧】基于狮群优化算法LSO优化相关向量机RVM实现数据多输入单输出回归预测附matlab代码.rar
- 【创新无忧】基于淘金优化算法GRO优化广义神经网络GRNN实现电机故障诊断附matlab代码.rar
- 【创新无忧】基于淘金优化算法GRO优化广义神经网络GRNN实现光伏预测附matlab代码.rar
- 【创新无忧】基于淘金优化算法GRO优化广义神经网络GRNN实现数据回归预测附matlab代码.rar
- 【创新无忧】基于淘金优化算法GRO优化极限学习机KELM实现故障诊断附matlab代码.rar
- 【创新无忧】基于淘金优化算法GRO优化极限学习机ELM实现乳腺肿瘤诊断附matlab代码.rar
- 【创新无忧】基于淘金优化算法GRO优化相关向量机RVM实现数据多输入单输出回归预测附matlab代码.rar
- 【创新无忧】基于淘金优化算法GRO优化相关向量机RVM实现北半球光伏数据预测附matlab代码.rar
- 【创新无忧】基于鹈鹕优化算法POA优化广义神经网络GRNN实现电机故障诊断附matlab代码.rar
- 【创新无忧】基于鹈鹕优化算法POA优化广义神经网络GRNN实现光伏预测附matlab代码.rar
- 【创新无忧】基于鹈鹕优化算法POA优化广义神经网络GRNN实现数据回归预测附matlab代码.rar
- 【创新无忧】基于鹈鹕优化算法POA优化极限学习机ELM实现乳腺肿瘤诊断附matlab代码.rar
- 【创新无忧】基于鹈鹕优化算法POA优化相关向量机RVM实现数据多输入单输出回归预测附matlab代码.rar
- 【创新无忧】基于鹈鹕优化算法POA优化极限学习机KELM实现故障诊断附matlab代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈