gps 태그 앨범 제작(3/4)

perl을 쓰기 위해 docker를 사용했다. commit대신 간단한 Dockerrun을 만들었다. commit으로 이미지를 만들면 다음에 다시 만들 수 없다한다.

FROM perl:v5.30.1
MAINTAINER ???
RUN apt-get -y update
#GooglaMaps::V3 설치
RUN cpan HTML::GoogleMaps::V3
#https 설정.
RUN cpan install LMP::UserAgen Mozilla::CA
RUN cpan install LWP::Protocol::https
RUN cpan install Bundle::DBI
RUN cpan install DBD::mysql

host에 있는 mysql에 접속하기 위해 옵션을 docker에 run 옵션을 줬다.

docker run -it --network=host -e LC_ALL=C.UTF-8 -v ????:/home/ perl:mysql_Map /bin/bash

DBI:mysql로 연결할 때 띄어쓰면 에러를 볼 수 있다. 붙여써야 한다. 이걸 모르고 하루를 날렸다. 또 한글 출력에 문제가 있는데 binmode를 주석처리 했다.

se utf8;
use strict;
use warnings;
use DBI;
use HTML::GoogleMaps::V3;
#아래내용은 구글MAPs 에 사용.
#binmode STDOUT, ":utf8";

my $host ="127.0.0.1";
my $user = "???";
my $password = "?????";
my $database = "?????";
my $tablesname =  "????";

#모두 붙여서 사용..
#space 있으면 connect 에러
my $dbh = DBI->connect("DBI:mysql:database=$database;host=$host", $user, $password, {RaiseError => 1});

#한글 설정
my $setkorean="SET NAMES utf8";
$dbh->do($setkorean);
#query 설정.
#my $query = "select * from picture where 태그 like '%??%' limit 10";
#테스트용 query
my $query = "select * from picture where (태그 like '%??%' and gpsLatFloat != 0) limit 10";

#query 실행
#my $sth=$dbh->prepare($query);
#$sth->execute();

#while(my $ref = $sth->fetchrow_hashref()){
#	print "Found: $ref->{'perl_tag'}";
#}
#print $sth->rows;

my $map = HTML::GoogleMaps::V3->new(
    api_key => "???"
);

#query 실행
my $sth=$dbh->prepare($query);
$sth->execute();

while(my $ref = $sth->fetchrow_hashref()){
	print "Found: $ref->{'perl_tag'}";
	$map->add_marker(
		point => [$ref->{'gpsLongFloat'},$ref->{'gpsLatFloat'}],
		html => qq{<a href=$ref->{perl_path}>$ref->{perl_tag}</a>},
		);
};#while loop

$sth->finish();
$dbh->disconnect();

my ( $head, $map_div ) = $map->onload_render;

print <<"END_HTML";
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
END_HTML

print $head . "\n";

print <<"END_HTML";
</head>
<body onload="html_googlemaps_initialize()">
END_HTML

print $map_div . "\n";

print <<"END_HTML";
</body>
</html>
END_HTML

이제 marker infoWindows를 이쁘게 설정하면 된다. 아무래도 설명을 입력해야 할 듯 하다.

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.