Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中,如何计算哪个shapefile(郊区)包含给定的lat lon点_Php_Shapefile - Fatal编程技术网

在PHP中,如何计算哪个shapefile(郊区)包含给定的lat lon点

在PHP中,如何计算哪个shapefile(郊区)包含给定的lat lon点,php,shapefile,Php,Shapefile,我只能访问PHP5(无PostGIS) 我有一堆郊区的形状文件,还有一些带有拉特-隆点的事件。我对形状文件没有任何经验 检查哪些shapefile包含这些lat-long点(仅使用PHP)的最佳方法是什么 我是否将shapefile转换为lat-long多边形并使用标准多边形点交点方程 或者这些是用于加载/处理shapefile的很棒的PHP库?要处理shapefile,我建议将它们加载到具有空间关系的数据库中,并使用数据库的空间关系功能 为此,我个人使用PostgreSQL和PostGIS扩展

我只能访问PHP5(无PostGIS)

我有一堆郊区的形状文件,还有一些带有拉特-隆点的事件。我对形状文件没有任何经验

检查哪些shapefile包含这些lat-long点(仅使用PHP)的最佳方法是什么

我是否将shapefile转换为lat-long多边形并使用标准多边形点交点方程


或者这些是用于加载/处理shapefile的很棒的PHP库?

要处理shapefile,我建议将它们加载到具有空间关系的数据库中,并使用数据库的空间关系功能

为此,我个人使用PostgreSQL和PostGIS扩展。它有一个用于将shapefile转换为SQL插入的实用程序。然后,您可以将您的点放入WKT(众所周知的文本)中,并查询数据库中它与哪个形状文件相交

我不相信php本身有任何处理GIS的内置函数


编辑-该死-很抱歉,我在文章之后才看到(无PostGIS)部分。您可以将多边形转换为wkt并使用多边形点交点。

要使用形状文件,我建议将它们加载到具有空间关系的数据库中,并使用数据库的空间关系功能

为此,我个人使用PostgreSQL和PostGIS扩展。它有一个用于将shapefile转换为SQL插入的实用程序。然后,您可以将您的点放入WKT(众所周知的文本)中,并查询数据库中它与哪个形状文件相交

我不相信php本身有任何处理GIS的内置函数


编辑-该死-很抱歉,我在文章之后才看到(无PostGIS)部分。您可以将多边形转换为wkt并使用多边形点交点。

每个形状文件由3部分组成,shp、shx、dbf。shp文件包含几何图形,shx是帮助访问shp的索引,dbf是普通的旧数据库文件,包含每个记录的数据

可以从shp文件中提取边界框,如下所示:

$handle = fopen("path/to/file.shp","rb");
fseek($handle, 36);
$min_x = unpack("d",fread($handle,8);
$min_y = unpack("d",fread($handle,8);
$max_x = unpack("d",fread($handle,8);
$max_y = unpack("d",fread($handle,8);
// Note, this code will only work on a little-endian machine
// You'll need to do a byte swap on big endian systems
然后可以测试给定事件是否位于shapefile的边界框中

if (($event_x >= $min_x) && ($event_x <= $max_x) 
      && ($event_y >= $min_y) && ($event_y <= $max_y))

如果($event\u x>=$min\u x)&($event\u x=$min\u y)&($event\u y每个形状文件由三部分组成,shp、shx、dbf。shp文件包含几何图形,shx是帮助访问shp的索引,dbf是包含每个记录数据的普通旧数据库文件

可以从shp文件中提取边界框,如下所示:

$handle = fopen("path/to/file.shp","rb");
fseek($handle, 36);
$min_x = unpack("d",fread($handle,8);
$min_y = unpack("d",fread($handle,8);
$max_x = unpack("d",fread($handle,8);
$max_y = unpack("d",fread($handle,8);
// Note, this code will only work on a little-endian machine
// You'll need to do a byte swap on big endian systems
然后可以测试给定事件是否位于shapefile的边界框中

if (($event_x >= $min_x) && ($event_x <= $max_x) 
      && ($event_y >= $min_y) && ($event_y <= $max_y))

if($event\u x>=$min\u x)&($event\u x=$min\u y)&&($event_y我知道这个问题已经很老了,但作为对社区和未来在本机PHP中寻找类似功能的用户的服务,我想指出,my是一个免费的开源PHP库,可以读取和写入任何ESRI Shapefile,而无需任何第三方依赖


链接到GitHub项目:

我知道这个问题已经很老了,但作为对社区和未来用户的服务,我想指出,my是一个免费的开源PHP库,可以读写任何ESRI Shapefile,没有任何第三方依赖


链接到GitHub项目:

询问者无法访问PostGIS。询问者无法访问PostGIS。