当前位置: 首页 > 知识库问答 >
问题:

用PostGis,选择经纬度

黄沈浪
2023-03-14

在我的应用程序中,我将Yii与PostgreSQL和PostGIS一起使用。我有一个具有字段“location”的模型“user”。Location-field的内容对人来说毫无意义,但是Postgres可以使用st_astext-method将Location-field的值转换为经度和纬度。我已经在我的模型中为经度和纬度创建了虚拟字段。当我保存我的模型时,我使用beforeSave和afterSave方法将location设置为它的正确值。

共有1个答案

李烨
2023-03-14

我很容易就解决了这个问题。我在CActiveRecord类中寻找beforeSelect和afterSelect方法,而我本应该寻找beforeFind和AfterFind。

我是这样做的。欢迎任何改进建议:)

public function beforeFind(){
    $criteria = new CDbCriteria;
    $criteria->select = "*,ST_asText(location) as location";
    $this->dbCriteria->mergeWith($criteria);
    return parent::beforeFind();
}

public function afterFind(){
    $location = str_replace('POINT(','',$this->location);
    $location = str_replace(')','',$location);
    $location = explode(" ", $location);

    $this->lon = $location[0];
    $this->lat = $location[1];
    return parent::afterFind();
}
 类似资料:
  • 本控件基于ios4,采用UIPickerView实现。收录了中国所有省地市,并提供精准经纬信息

  • 问题内容: 我一直在尝试找到一种使用Golang尤其是库gorm插入和检索几何类型的方法。我还尝试使用库orb,它为几何定义了不同的类型,并提供了不同格式之间的编码/解码。 Orb 已经为每种类型实现了和方法。这使得go’s 和函数可以使用除基本类型以外的其他类型。但是,Orb期望使用以众所周知的二进制(WKB)格式表示的几何。 orb文档显示,要实现此目的,您只需将字段包装在PostGIS函数中

  • 问题内容: 我有一个按照以下示例结构的mysql表: 现在我想做的是创建一个查询,该查询将在搜索位置的选定公里内选择结果 因此,假设他们搜索“灰色河流”,然后选择“在20公里以内找到所有结果” 它显然应该选择“灰河”,但也应根据经度和纬度选择灰河20公里以内的所有位置。 我真的不知道该怎么做。我已经读过haversine公式,但不知道如何将其应用于mysql SELECT。 任何帮助将非常感激。

  • Highmaps 从 1.1.0 开始支持经纬度定位功能,该功能依赖第三方库 proj4js(需要在 Highmaps 之前引入),最新版的文件可以从 cdnjs 上获取 <script src="https://cdn.bootcdn.net/ajax/libs/proj4js/2.7.2/proj4.js"></script> 有了经纬度支持后,我们可以通过 lon 和 lat 属性来指定经

  • 我有一个geopandas数据帧,由线串和多线串组成。我想选择那些包含经纬度框(由我定义)内的点的线串和多线串,我没有几何图形。换句话说,我有一些美国地质勘探局的断层图,我想从一些纬度/纬度的一定距离内选取这些断层线的正方形镶嵌图。到目前为止,我已经成功地从整个数据帧中展开坐标,并且只保存位于lat/lon框中的点,但是我不再保留保存在数据帧中的原始几何体或信息。(即像这样:) 对于如何使用Geo

  • 我有一个Postgres表,其中包含一些使用shapefile创建的数据。我需要找到所有在给定纬度和经度半径2英里范围内相交的记录。我使用了一些查询,包括下面这个。 从us_census_zcta中选择 ST_INTERSECTS(几何、圆(点(40.730610, -73.935242), 2)); 但是没有一个管用。我到底做错了什么?如何才能得到我需要的结果? SRID为4269(NAD 83