#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;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
libgeos库源码以及测试程序.zip (5个子文件)
pros
countries.wtk 3.4MB
geos-3.13.0.tar.bz2 6.49MB
geos_my_test.c 3KB
a.out 13KB
china.wtk 93KB
共 5 条
- 1
资源评论
忆源
- 粉丝: 5
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据结构--实验报告2.docx
- 本软件包是用于Windows下往云端上传代码的工具
- MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm
- 基于Vue开发的碳排放数据可视化+源码+项目文档(毕业设计&课程设计&项目开发)
- 20241125-国外立体仓库丹巴赫堆垛机博图PLC项目&电气图纸PDF
- 信息化在线教学平台-毕业设计,基于Python+Django+Vue+MySql开发,源码+数据库+毕业论文+视频演示
- 基于PyTorch和Transformers框架的双语和跨语言嵌入模型(含项目源码、使用教程).zip
- CUMT自然语言处理报告-Qwen2大模型实现命名实体识别
- 毕业设计,基于Python+Django+Vue+MySql开发的信息化在线教学平台,内含完整源代码,数据库,毕业论文,视频教程
- 通信原理-AMI编译码(归零码)实验报告
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功