PostGISのGEOMのレコードを任意で囲んだPolygonデータに変更する方法をまとめてみた

もう、だいぶ前になりますが

 

・PostGISのGEOMからKMLのPolygonデータを取得する

https://it-trouble.help/postgis%e3%81%aegeom%e3%81%8b%e3%82%89kml%e3%81%aepolygon%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/

 

・PostGISで国勢調査データをインポートを手軽に始めてみる

https://it-trouble.help/postgis%e3%81%a7%e5%9b%bd%e5%8b%a2%e8%aa%bf%e6%9f%bb%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e3%82%a4%e3%83%b3%e3%83%9d%e3%83%bc%e3%83%88%e3%82%92%e6%89%8b%e8%bb%bd%e3%81%ab%e5%a7%8b%e3%82%81%e3%81%a6/

 

で利用していたGEOMのデータが古くなって、現在のデータと変わってしまったので自分で囲った範囲のPolygonを利用したくなった。

 

どうすればよいのかなって思ってたんだけどなんとかできたのでまとめてみました。

 

手順

※QGISはバージョン3を利用

1.QGISでGoogle MAP等の地図を表示する

・Google MAP表示方法

「XYZ Title」>右クリック>「新しい接続」をクリックする

名前:Google MAP

URL:https://mt1.google.com/vt/lyrs=r&x={x}&y={y}&z={z}

 

 

そうするとGoogleMAPが表示される。最初は青い画面になるのでマウスでスクロールしてズームアウトしてみるとよい

 

 

 

 

2.レイヤー追加して、ポリゴンを作成する

「レイヤ」>「レイヤの作成」>「新規シェープファイルレイヤ」をクリックする

 

 

・下記の内容でOKをクリックする

ファイル名:任意の名前

ファイルエンコーディング:UTF-8

ジオメトリタイプ:ポリゴン

 

 

・編集モードを切り替えて、「ポリゴン地物を追加」アイコンをクリックする

 

・任意の範囲を囲む

 

3.GEOMのデータを出力する

・「レイヤ」>「名前を付けて保存」をクリックする

形式:PostgresSQL SQL dump

ファイル名:任意の名前

CRS:GEOMで利用しているコードと合わせること

ジオメトリタイプ:Polygon

GEOM_TYPE:geography

 

 

・保存したSQL DUMPから中身を取得する

 

上記の赤枠をGEOMのところに上書きすればOK

 

 

ってな感じでGISのPolygonデータを書き換えてみた。

PHP:Cannot use a scalar value as an array

PHPでたまにおやおやっていうエラーを出してしまったときのメモ。

 

エラー内容「Cannot use a scalar value as an array」

翻訳すると「スカラー値を配列として使用できません」

 

え?っと、、、

 

ちゃんと変数の内容を追ってみるとわかると思いますが、

例えば:X=1としておいたのに途中からX[‘id’] =12345ってしているケースに発生します。

 

たぶん、最初は値を入れておけばよかったのですが後ほどで配列しなければならないっていうときに発生させてしまう。エラーです。

 

オレ(1)、Xっていう変数に入っていていっぱいなのに、勝手に配列ってして拡張されてオレ(1)はどうしたらいいんだ??っていう感じです。

 

 

印刷プレビュー画面のスタイルを調整するときに便利だった機能

ホームページ制作時にやっぱ、印刷ボタンもつけてくれ~って言われることもあると思います。

WordPressの場合は気にすることないのですが独自で作っている場合はちょっとめんどいです。

 

ホームページの印刷プレビューのデバッグに役立つ方法

ブラウザのエミュレーターのCSSをPRINTにする

chromeの場合は、「F12」を押した後、下部の「・・・」から「Redering」>「Emulate media」を「PRINT」にする

 

 

これでPRINTのCSSが適用された状態で画面が表示される。

 

自然に発してしまったお言葉!

狙っていません。自然に話している最中にでてしまったお言葉を忘れてしまうの再発防止のためメモしてみることにしました。

どこかで公開されているものもあると思いますが、個人的なものなのであしからず。

 

借金しにいくからシャキーンとした格好しないと!

しゃっきんしにいくからシャキーンとしないと!)

 

ビジネスしていると融資で借入するときがあると思います。そんな時に出てしまう。

 

令和元年のコインってレアなんじゃない?

え?昭和64年=平成元年の時を思い出して、数少なかったなっていう印象があったのでそんなことを令和でいったらそーなった。

 

このメール、よめ~る

システム動作テストで送信したメールが文字化けしていなかどうかチェックしてもらおうと思ってました。

 

景気だとケーキやも閉店だな

歩いていた時にふとケーキ専門店がなくなってたのを見て思わず…

 

ほんとフォント反映しているの?

HP作成しているときにWEBフォントが反映しているかって話していたら…

 

きっとこれは、アマゾンエコー(スマートスピーカー)のアレクサくんが日々このようなことを言うからいつの間にかいうようになってしまったのではないかと思っています。

reCAPTCHAのスコアを確認する方法(reCAPTCHA demo)

reCAPTCHA V3の導入をしてみようと思ってテストしていたのですが、そのぐらいのそのサイトがスコアなのか閾値を決めるために知りたかったのでその方法を調べてまとめてみました。

 

基本的には、ダウンロードしたファイルをそのままアップロードして利用しようと考えています。

(「recaptcha-master/examples」フォルダの配下で動作させることが前提)

 

■reCAPTCHA のスコアを測定するためのツールの準備

reCAPTCHAのスコアを確認するツールですがGITHUBで公開されています。

https://github.com/google/recaptcha

 

1.Clone or downloadをクリックしてZIPファイルでダウンロードします。

 

2.「recaptcha-master\examples」の「config.php.dist」→「config.php」にリネームします。

 

3.今回はV3を利用するのでV3のところに取得したサイトキーとシークレットキーを入れます。

  'v3' => [
    'site' => '取得したサイトキー',
    'secret' => '取得したシークレットキー',
  ],

 

4.「autoload.php」のパス設定

require_once __DIR__ . '/../vender/autoload.php';
↓
require_once __DIR__ . '/../src/autoload.php';

※該当ファイル「recaptcha-v3-request-scores.php」と「recaptcha-v3-verify.php」

 

5.「recaptcha-v3-verify.php」パスが「recaptcha-master/examples」にならないため、調整。

106行目の「recaptcha-v3-verify.php」のパスを変更
fetch('./recaptcha-v3-verify.php?action=<?php echo $pageAction; ?>&token='+token).then(function(response) {

※該当ファイル「recaptcha-v3-request-scores.php」

 

6.FTPで「recaptcha-master」毎アップロードします。

 

7.「設置したサイト/recaptcha-master/examples/recaptcha-v3-request-scores.php」にアクセスします。

 

 

これでreCAPTCHAのスコアが見えるようになりました。

スコアは、「4Received response from our backend:」の「”score”: 」の箇所を確認してください。

 

 

ホームページ作成にWordPressを利用していますが、コンタクトフォームとの組みあわせることによりスパム対策が強化になります。

また、利用するプラグイン(コンタクトフォームやコンタクトフォームの確認プラグイン)の組み合わせによってはコンタクトフォームが正常に動作しないケースがあるので注意が必要です。

 

WordPressの404判定はどこのフックタイミングでヒットするのか?

WordPressで404の判定がどのタイミングでされているのか調べてみた。

また、その時にクエリを変更して404判定を解除できるのか?

 

※hook名 → is_404()で判定。

 

parse_query → bool(false)

pre_get_posts → bool(false)

the_posts → bool(false)

wp → bool(true)

 

となった。

wpで判定されている。

 

じゃあ、例えば、2つのカスタム投稿をまたいで一覧を表示したい場合はどうするか。。

具体的なイメージは、

あるタクソノミーのときだけ、別のカスタム投稿の記事も合計した一覧を作りたい場合。

 

→これでページネーションをすると、メインのカスタム投稿の記事がないと404の判定になってしまう。

どこでhookをかけたらよいのか….

 

結論として「pre_get_posts」でhookをかける

「$query->set()」でクエリを変更する。archive時の表示件数を変更するのと同じ感じです。

function change_posts_query($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;


    if ( $query->is_archive() ) { /* アーカイブページの時に表示件数を5件にセット */
        $query->set( 'posts_per_page', 5);
    }
    if ( $query->is_archive() && $query->is_tax()) {
        $query->set( 'post_type', array('custom_post1','custom_post2'));
    }

}
add_action( 'pre_get_posts', 'change_posts_query' );

 

この場合の「get_post_type()」はどっちになるのか

→記事があるのほうのPOSTTYPEが返ってくる。オレオレ的にはメインはこっちのPOSTTYPEだからこっちを返せよ!!っていうのは通じない。

 

「get_query_var( ‘post_type’ )」では2つのPOSTTYPEが返ってきます。

 

っていうことで元の情報を取りながら…

下記のようにすることでURLで指定されたカスタム投稿タイプを取得することが可能

global $wp_query;
var_dump($wp_query->query["post_type"] );

 

 

 

2つをがっちゃん越して表示するのってやっぱりめんどいな。。。

 

 

今更だけどWordPressでホームページ制作するときに忘れがちなことをまとめてみた。

東京で、ホームページをWordPressを使って作成しているけど、関数とかどーするのかとか忘れてしまうからちょとした内容をまとめてみました。

 

get_posts()だと総ページ数が取得できない

それなのでページネーションを使う場合は「new WP_Query()」を利用する

 

固定ページでページネーションしたい

page.phpなどページテンプレートでページネーションを作ることが可能

 

自作したページネーションでarchiveをページ移動したら、404ページが表示される(記事表示件数を変更している場合)

 

function.phpで記事表示件数を変更している場合は、「pre_get_posts」でhookをかけて記事一覧の件数を変更します。

function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( $query->is_archive() ) { /* アーカイブページの時に表示件数を5件にセット */
        $query->set( 'posts_per_page', 5;
    }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );

 

必ず日付を表示したい場合はthe_time()を使う

the_dateでは、「同じ日に複数の記事がある場合は、最初の記事とともに一度だけ出力される。」というこ動作仕様なので、毎回日付を表示したい場合は「the_time( ‘Y-m-d’ ); 」を利用する

 

投稿記事0件では、get_post_type()でPOST TYPEを取得することができない

そんな場合は「get_query_var( ‘post_type’ );」でPOST TYPEを取得する

 

taxonomy.phpで現在のタクソノミー名を取得したい

「get_query_var」を使って取得する。あとは「get_taxonomy( $taxonomy )」でタクソノミーの詳細情報を取得

    $taxonomy  = get_query_var('taxonomy');
    var_dump($taxonomy);

 

taxonomy.phpで現在のターム名を取得したい

「get_query_var」もしくは「single_term_title()」(名前で取得。taxonomy.php)を使って取得する

get_query_var( 'term' )

var_dump(single_term_title())

 

WordPressのクエリで全件取り出したい時は「posts_per_page」を「-1」とする

例:
$arg = array(
    'post_type'=>'page',
    'posts_per_page' => -1,
);
$posts = get_posts($arg);

※用途的には、テーマ設定等で固定ページの全件の一覧を表示して設定を作る場合に利用

 

サムネイルの有無判定を「has_post_thumbnail」で行った場合で、記事にアクセス制限に気を付ける

サムネイル判定に「has_post_thumbnail」を利用しますが、記事自体にアクセス制限がついている場合は、アクセス制限が許可されていないアカウントに対しては、サムネイルが無いよって判断となる。

→非会員でもサムネイルだけ見せたい場合は「has_post_thumbnail」を使えないので「get_the_post_thumbnail」で判定するのが良いかと思う。

 

WordPressはセッションを利用していない

もしワードプレスでセッションを利用したい場合は、PHPのセッション関数で利用することは可能。

 

ホームページ作成に関するちょこっとまとめのページ更新は、随時ついか。

 

.htaccessが勝手に書き換えられる

設定を更新すると勝手に.htaccessが書き換えられることがあります。あれ、設定入れていたのに消えた?ってならないようにするためには「# BEGIN WordPress~# END WordPress」の中に記載しないようにします。

 

特定のページを検索結果から除外したい。プラグインで実施

「Search Exclude」っていうプラグインがあるからそれをインストールして、各ページで設定すればOK

 

カスタム投稿毎の検索結果を作成したい

function.phpに「search-カスタム投稿名」のテンプレートを利用するよという登録が必要。

あとは、「search-カスタム投稿名」テンプレートファイルを作成していく。

 

function.phpに以下を記述

add_filter('template_include','custom_search_template');
function custom_search_template($template){
    if ( is_search() ){
        $post_types = get_query_var('post_type');
        foreach ( (array) $post_types as $post_type )
            $templates[] = "search-{$post_type}.php";
        $templates[] = 'search.php';
        $template = get_query_template('search',$templates);
    }
    return $template;
}

 

検索フォームにhiddenでpost_typew追記する

<form id="search" method="get" action="<?php echo home_url( '/' ); ?>">
  <input type="text" value="<?php the_search_query(); ?>" name="s">
  <input type="hidden" value="post" name="post_type" id="post_type">
  <input type="submit" value="Search">
</form>

ただこれで検索かどうか判定するとアーカイブっぽいので注意

 

URL的には、「/カスタム投稿名?s=」でもいけるみたい。「?s=」が無いとアーカイブが表示される

強制的にtermの内容を変更して保存する方法

WordPressで保存時に強制的にtermの値を追加もしくは変更して保存したかったのでWordPressの関数を調べていたところ「wp_set_object_terms」を発見した。

 

下記のように記述する。例:投稿IDにタームのチェックボックス1とチェックボックス2を強制的にチェックする

wp_set_object_terms(投稿ID, array('チェックボックス1','チェックボックス2'), 'ターム名', true );

 

動作的には上記の一文で、投稿IDのtermに対して変更が行われる。

詳しい関数に関しては下記のURLを参照

https://wpdocs.osdn.jp/関数リファレンス/wp_set_object_terms

 

使ってみたときのざっくりなポイントをまとめてみた。

・この関数だけでtermが保存される。

・termの名前で指定ができる

・4つ目の値で、追加なのか置き換えなのかの設定

・成功するとIDが返ってくる、失敗はエラー内容

 

コツをつかめばなんてことはないかな。

 

スマホ用冷却ツール

暑い夏が過ぎたこのタイミングですが、来年に向けての便利グッズをご紹介させていただきます。

 

電子機器を冷やす場合は、一般的な保冷剤は適しません。温度が低くなりすぎて、結露が発生し、その水で電子回路に悪影響があるため、スマホを壊す可能性があるためです。

 

今回、教えていただいたものは、「塩化化合物」でできており「潜熱」を利用した熱対策グッズなので結露することはないとのことです。

 

潜熱:氷が見ずになるように物質が個体から液体になったり(又は逆)するときの熱エネルギー

 

↓こんな感じで販売されています(アマゾンより)

 

これって。。。夏休みの自由研究になりそうなテーマかもって、今更ながら思いました。

 

とりあえず今日はここまで。

Googleでこのクエリの検索パフォーマンスが表示されるようになりました。

Googleでこのクエリの検索パフォーマンスが表示されるようにいつの間にか表示されるようになっていました。

 

ってなものが表示されております。

 

クエリの検索パフォーマンス欄の「使い方をご確認ください」をクリックするとそこの

 

「1925 年以来変更されていないメニューを掲載している場合は、更新してください。サルサパリラのような、廃れてしまったドリンクはあまり検索されません。」

 

って記載があり「サルサパリラ」ってなんだ!!って気になりました。

 

えーと、ありがたいことにウィキペディアにリンクが貼ってあり、見てみると

 

なんと「ドクターペッパー!!」( ゚Д゚)ノ

 

 

そうですね、最近は販売している自動販売機もあまりみなくなりました

 

一度も飲んだことがないので「ドクターペッパー」どんな味かわかりませんが、ドクターペッパー好きがいて飲んでいたのを思い出しました。。。

 

 

横道にそれましたら、ホームページの検索結果には、最新情報が掲載されているウェブサイトを優先させて表示させるという意味合いでしょうか・・・