小编Gre*_*idt的帖子

如何通过 Google 反向地理编码可靠地查找邮政编码

我需要根据城市和省名称获取具有代表性的加拿大邮政编码。我最初的方法是使用 Google 的地理编码 API 将城市、省份转换为[lat,lng]反向地理编码,以获取匹配的地址,并从中提取邮政编码。城市和省份来自使用 Google 地图自动完成功能的表单,因此我知道它们(至少几乎)始终有效。在一些测试中,这工作得很好,但我很快就在实际数据中遇到了一个失败的案例:曼尼托巴省的雪湖。

https://maps.googleapis.com/maps/api/geocode/json?address=Snow+Lake%2C+Manitoba&key=MYKEY

在几何部分,我得到:

location    
    lat 54.87856679999999
    lng -100.0220321
location_type   "APPROXIMATE"
Run Code Online (Sandbox Code Playgroud)

但每当我查找该位置(包括不同的精度级别)时,我都会得到不包含邮政编码的结果。

https://maps.googleapis.com/maps/api/geocode/json?latlng=54.8785668,-100.0220321&key=MYKEY

我也尝试过从place_id各种事情返回的 ,但没有运气。奇怪的是,如果我在常规 Google 地图网站中搜索马尼托巴省的 Snow Lake,它会精确定位并告诉我邮政编码是 R0B 1M0。那么为什么他们的网站提供了很好的信息,但没有提供 API?即使我将第二个网址中的位置替换为 Google 地图在搜索后的网址中的位置 (54.8808471,-100.0274579),我仍然无法取回邮政编码,如果我使用以下地址也无法取回邮政编码:它给出了该位置(531 Lakeshore Drive)。

通过反复试验(在 Google 地图上查找一些街道名称),我发现搜索 117 Balsam St. 会给出邮政编码和位置,我可以通过反向地理编码来获取邮政编码。但我传入的数据没有街道名称或号码,只有城市和省份,所以这不是解决方案。该地址确实为我提供了 location_type 的 ROOFTOP,而不是我为其他人获得的 APPROXIMATE 或 RANGE_INTERPOLATED。

有人知道这里有什么交易吗?是否有一种可靠的方法可以让我从这个 API 中获取我需要的东西,或者它只是一个偶然的提议?

google-maps google-geocoding-api

4
推荐指数
1
解决办法
5121
查看次数

CakePHP 3时间列获取日期

我在MySQL数据库中定义了许多列作为"时间".也就是说,他们有时间,但不是约会.当它们被CakePHP 3 ORM读取时,它们将被转换为Cake\I18n\Time对象(通过Cake\Database\Type\TimeType类),但结果始终同时包含日期和时间,其中日期设置为当前日期.例如,如果值为"20:00:00",debug($record['start_time'])则会生成:

object(Cake\I18n\Time) {
    'time' => '2015-06-21T20:00:00+0000',
    'timezone' => 'UTC',
    'fixedNowTime' => false
}
Run Code Online (Sandbox Code Playgroud)

当我在模板中回显它(没有使用过setToStringFormat)时,我会得到类似的东西6/21/15 8:00 PM.当然,我可以使用$this->Time->format它将其恢复为仅限时间的格式,但我需要这样做似乎很奇怪.为什么Cake忽略了这只是一个时间的事实,更重要的是,有没有办法让它停止?

mysql time orm date cakephp-3.0

3
推荐指数
1
解决办法
2981
查看次数

我在 addCase 中指定什么“类型”来返回一列?

我正在尝试使用 case 语句使查询工作,但无法弄清楚如何让 case 返回列值而不是常量。我的查询工作正常,除了我为结果提供的列名被 Cake 引用或以其他方式错误处理,或者 PDO 位于我无法挖掘的层中。我深入了解了 bindValue,但一路上我遇到的文档都没有告诉我如何做到这一点。

我找到了这个示例评论:

$statement->bindValue(1, 'a title');
$statement->bindValue(2, 5, PDO::INT);
$statement->bindValue('active', true, 'boolean');
$statement->bindValue(5, new \DateTime(), 'date');
Run Code Online (Sandbox Code Playgroud)

但在所有这些情况下,提供的值是一个常数。我需要传入一个字符串,它是我想要返回的列的名称。

我尝试了'string'(导致引用列名)和'integer'(导致 0)。我尝试过PDO::FETCH_COLUMN(似乎不太可能,但看起来像是http://php.net/manual/en/pdo.constants.php的下一个最佳选择,并且很容易尝试......)。我尝试了'literal',灵感来自您可以将文字字符串放入表达式(导致Error: unknown type "literal")的方式。该错误消息使我src/Database/Type.php看到了,但其中也没有任何帮助。

所以,我很难过。这是我拥有的代码的简单版本(省略了几个条件和不相关的列):

$query = $this->Games->find();
$team_id = $query->newExpr()->addCase(
    [$query->newExpr()->eq('Games.status', 'home_default')],
    ['home_team_id', 'away_team_id'],
    ['string', 'string']
);
$defaulting = $query
    ->select([
        'id' => $team_id,
        'count' => 'COUNT(Games.id)',
    ])
    ->where([
        'Games.status IN' => ['home_default', 'away_default'],
    ])
    ->group('id')
    ->toArray();
Run Code Online (Sandbox Code Playgroud)

这将生成此 SQL: …

sql orm cakephp query-builder cakephp-3.0

2
推荐指数
1
解决办法
794
查看次数