Labo288

プログラミングのこと、GISのこと、パソコンのこと、趣味のこと

プログラミング

2020年度の振り返り(エンジニア1年目)

はじめに 公務員をやめて2020年4月にエンジニアになってからちょうど1年経ったので振り返りつつ技術の棚卸しでも。個人開発と業務ごちゃまぜです(業務系は当然守秘義務を厳守)。 1年間やったこと つくったもの QGISプラグイン github.com github.com githu…

OpenLayersでバイナリベクトルタイルをstyle.jsonでスタイリング表示する

OpenLayersで地理院タイルをスタイリングしつつ表示する例 はじめに OpenLayersは基本機能だけでバイナリベクトルタイルをソースとしたレイヤーを表示する事が出来ます。 qiita.com でも基本機能ではMapbox Style形式のいわゆるstyle.jsonを読み込む事は出来…

Windowsの開発環境について(Visual Studio Code + WSL)

この記事はQiitaから逆輸入したものです。最近更新していなかった罪滅ぼしです。 概要 Windows版のVSCodeでWSLをシームレスに連携する手順の記事です もはやmacOSと差がなさそう、Windowsでもストレスフリーに開発出来る はじめに プログラミングと言えばmac…

Mapbox GL JS用のラッパーライブラリを作ってみた話

はじめに ベクタータイルやWebGLによる高速描画など、WebGISで今最もアツいのはMapbox GL JSに違いありませんが、私はLeaflet.jsが好きです。 なぜならAPIが非常にシンプルだからです。例えばGeoJSONレイヤーを追加したければ、Leaflet.jsでは以下のように書…

QGISで地図PDFを簡単に出力するプラグイン「EZPrinter」をつくりました

はじめに QGISの基本機能としてのPDF出力は、範囲や縮尺の指定が微妙に使いにくいです。 レイアウト機能を使って少し手間をかければ、かなり綺麗な地図も作成出来ますが、QGISで表示している地図をサクッと紙などに出力したい時のためにプラグインを作りまし…

北海道内15箇所にポケモンマンホールが設置されるので最適経路を計算してみた

この記事はFOSS4G Advent Calendar 2019の12月8日の記事です。 昨日の記事は、chomyさんのGDALでGCOM-Cの可視領域のデータからTrue Colorイメージを再構成してみたでした。 FOSS4G Advent Calendar、毎日楽しませて頂いております。 参加表明した時点ではMap…

iOS向けGeoJSONビューア「Vanilla GIS for iOS」リリース。使い方など

はじめに 大体1ヶ月間くらいかけて、タイトルのとおり「Vanilla GIS for iOS」を開発しリリースしました。 Vanilla GIS for iOSとは コンセプト Vanilla GISという名前は、以前に作ったWebアプリと同じ名前です。そのコンセプトは「シンプルでユーザーがカ…

スライダーで色を選択するUIをつくれる「Color Slider」

はじめに iOS開発では、様々なGUIパーツがデフォルトで用意されています。 しかしながらカラーピッカーの類は存在しません。 標準のUISliderのように、スライダーにより色設定が出来ればと思い調べるとライブラリを発見しました。 ColorSlider github.com 機…

自作クラスをNSDataに変換したりUserDefaultsに保存するために

はじめに Swiftでクラスをエンコードする(=NSData型に変換する)場合は、そのクラスがNSObjectを継承していて、かつNSCodingプロトコルに準拠している必要があります。 カスタムクラスをUserDefaultsに保存したい場合等に必要となる知識ですが、かなりハマ…

MapboxにGeoJsonファイルをドラッグドロップで読み込むサンプル

はじめに www.labo288.site 以前紹介したLeafletによるWebGISでは、GeoJSONファイルとシェープファイル(zip圧縮されたもの)の読み込みに対応していました。 ドラッグドロップすると、POSTリクエストが飛び、(シェープファイルなら変換されて)GeoJSON形式…

静的なGeoJSONファイルを読み込んでLeafletにレイヤーを追加する

概要 GeoJSONファイルとは、以下のとおり、ある程度データの構造が予め規定されたJSON形式のファイルです。 { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": {"type": "Point", "coordinates": [102.0, 0.5]}, "properties"…

QGIS3.x系向けプラグイン作成手順や各種処理の実装方法について

はじめに オープンソースGISソフトウェア、いわゆるFOSS4Gの定番ソフト「QGIS」でプラグイン(拡張機能)を作成しました。QGISの最新バージョンは3.8で、3.x系はPython3を採用するなど後方互換性が一部失われ、2.x系のコードは動きません。ウェブ上にはプラ…

QGIS3.x系向けプラグイン「MagicWand」を作成しました

はじめに わたしは仕事柄GISで農地を見る機会が多く、オルソ画像からほ場のポリゴンを作ったりする事もあります。基本的にポリゴンの頂点をマウスのクリックでカチカチして作ります、めんどくさいです。 たとえばグラフィック系のソフトでよくある「自動選択…

シンプルなWebGIS「VanillaGIS」の紹介

はじめに オープンソースのGISにはQGISというド定番・大正義が存在しますが、インストールの手間、投影法など、若干敷居が高くなっています。ウェブ上で公開されている多数のGISデータ(国土数値情報等)の内容をすぐに確認出来る、シンプルなWebGISがあれば…

DBFファイルを変換するスクリプトを書き直した(Python3.x対応)

はじめに www.labo288.site 以前にも、DBFファイルを変換するスクリプトについての記事を掲載していました。 しかしながそこで利用していたライブラリがPython2.x系でのみ動作する枯れて管理されていないものだったため、今回、よりポピュラーなpyshp(shape…

Leafletのパフォーマンス改善について

はじめに Leafletは実装が簡単でカスタマイズ性も高く、非常に使いやすいWeb地図ライブラリですが、デフォルトの設定だと、多数の地物で構成されるベクターレイヤーの描画に、パフォーマンス上の問題がありました。要はポリゴンが多くなると途端に動作が重く…

FlaskとJavaScriptのFetch通信でダウンロードさせる方法

はじめに Flaskのレスポンスによってファイルをダウンロードさせる方法は以下のリンクのとおり3つあるようです。 qiita.comしかしながら、Fetch通信によるPOSTに対するresponseにはこれらの方法だけでは対応出来ませんでした。解決した方法を以下に載せてお…

Leaflet.jsでオーバーレイを追加する

はじめに 路線バスのShapefile(zip圧縮)を読み込んで表示する動画 なおGeoJSONエクスポート機能も実装済み 保存機能も実装はしているもののまだまだ完成は遠い それなりに大きいデータでもそこそこの速度で動作しているのがうれしい #GIS #Leaflet pic.twitt…

LeafletでGeoJsonを読み込む

はじめに オープンソースのWeb地図なら、Leafletが使いやすくてよいです。たとえばOpenStreetMapのタイル地図を実装する場合、以下のとおりです。 //地図を表示するdiv要素のidを設定 var map = L.map('map_container'); //地図の中心とズームレベルを指定 m…

ShapeファイルをGeoJSON形式に変換する

前提 zip圧縮されたシェープファイル群(.shp, .shx, .dbf)を、GeoJson形式で出力する関数です。 当然、シェープファイル群のファイル名が共通している必要があります。 また、.geojsonファイルを出力するのではなく、メモリ上での処理です。 事前にpyshp(s…

ioStreamの取扱について

はじめに Pythonでファイルの入出力処理を行う場合を考えます。私の例だと、ファイルの形式を変換して保存する処理を実装しました。この場合、ファイルの書き出しについて入門サイトでは新規ファイルをローカルに書き出して、データを追記する手順が紹介され…

DBFとCSVの相互変換ツールをWebアプリとして公開しました

更新5/15 エクセルファイル(.xls,.xlsx)のDBFへの変換に対応 ※現状、日本語が含まれていると正常に動作しません はじめに 結構前に、シェープファイルのプロパティであるDBFファイルとCSVファイルを相互に変換するPythonスクリプトを紹介しました。 www.la…

続TableviewのCell再利用の罠

はじめに 前回の記事で述べたとおり、TableViewは、画面外のセルは「存在しません」(画面内に入る直前で描写される)。 この仕様でさらにハマった点があったので追記。 ハマったところ 通常のTableViewの使い方は、セルに表示したい情報を、デリゲートメソ…

TableViewのセル再利用の罠

はじめに iOSアプリでGUIを作る際にはTableviewを使うことが非常に多いと思います。 このTableview、デフォルトだとセルのクラスはUITableViewCellで、表示出来るUIが事前に定められています(テキスト、サブテキスト等)。 たとえば画像を表示したかったり…

PythonのPDF処理まとめ(結合・分割, 画像変換, パスワード解除)

はじめに PythonでPDFを扱う方法を目的別にまとめます。 シンプルなファイル読み書き、画像への変換やパスワードロック解除等について記載します。 PDFファイル読み書き 基本的な読み書きについてはPyPDF2というライブラリを使う事で実装可能です。 pip inst…

パスワード付きのPDFを解除して保存するPythonスクリプト

はじめに 書類データといえば皆だいすきPDF、パスワード保護が可能で、その場合開くたびにパスワードを要求されます。 セキュリティ上パスワードがかかっている方が都合が良い事もありますが、パスワード無しで保存したい場合もあるのではないでしょうか。 …

PythonのGUIフレームワークPyQt(PySide)について

はじめに PythonのGUIフレームワークには以下のとおり、いくつかの選択肢があります。 PyQt PySide Tkinter Kivy TkinterはPython自体に内蔵されていたり、kivyは同一のソースでPCにもAndroidにも対応出来たりとそれぞれに特徴があります。 PyQt5は以上の定…

データ可視化特化GISフレームワーク「deck.gl」を使ってみた

はじめに 先進的なタクシー事業で有名なかのUber社によるオープンソースフレームワーク「deck.gl」を使ってみたので紹介を兼ねた感想の記事になります。このフレームワークはデータビジュアライゼーションに特化したGISフレームワークとなっております。WebG…

シェープファイルの.dbfファイルと.csvファイルを相互変換する

2019/7/2Python3.x系対応版を公開しました www.labo288.site 2019/5/2ウェブアプリ版を公開しました www.labo288.site はじめに 一般にシェープファイルとはいわゆるベクター図形データと理解されていると思いますが、図形にはプロパティと呼ばれるデータが…

未経験から1ヶ月かけてつくったウェブアプリ

https://travelmap-onrails.herokuapp.com/ TravelMapというウェブアプリです 海外旅行レビューサイトというつもりでつくりました WebフレームワークはRuby on Railsを利用しています 頭の中の理想形には届いてない感じですが、現状の知識、モチベ等勘案しこ…