goo-staticmaps 지도에 임의의 그림을 아이콘으로 표시하려면
10127 단어 Gogo-staticmaps
열흘째 보도에서 나는
go-staticmmaps
라는 프로그램 라이브러리를 소개했다.https://github.com/flopp/go-staticmaps
사실 최근 이 창고에서 꺼낸 p-r(작은 변경)가 합병되면서 떠올랐다.
그래서 이번에 오랜만에 기회가 왔어요. 저번에 보도된 속편으로서 프로그램 라이브러리를 더 잘 만들기 위해 더 생각해 봤어요!나는 이런 내용으로 쓰고 싶다.
지도에 임의의 그림을 아이콘으로 표시하려면
현재 go-staticmaps는 어떤 점을 나타내는 물건으로 기호를 준비하고 있다.
그러나 이 표시는 크기와 색깔을 바꿀 수 있지만 모양은 바꿀 수 없다.
모처럼 한번 왔는데 회사 장소를 나타내는 지도에 회사 로고, 어떤 캐릭터와 관련된 곳에 그 캐릭터의 얼굴을 표시하는 등 이렇게 사용하려고 했다.
따라서 임의의 이미지를 아이콘으로 표시할 수 있는 프로그램 라이브러리를 확장했습니다.
현재 태그의 구현
지금의 표기가 어떻게 실현되었는지 봅시다.
https://github.com/flopp/go-staticmaps/blob/master/marker.go#L125-L149 gc.DrawArc(x, y-m.Size, radius, (90.0+60.0)*math.Pi/180.0, (360.0+90.0-60.0)*math.Pi/180.0)
gc.LineTo(x, y)
gc.ClosePath()
gc.SetColor(m.Color)
gc.FillPreserve()
gc.SetRGB(0, 0, 0)
gc.Stroke()
대단하네, 2D 그림을 그릴 수 있는 프로그램 라이브러리에 기호가 그려져 있어.
따라서 이미지를 표시하는 장치가 없는 것 같으니 다시 만들자.
icon.go의 실현
Icon
이런 새로운 기능을 설치해 보았다.
이 옵션을 사용하면 지정한 위치에 그림을 표시할 수 있습니다.
물론 기존의 표지와 경로를 결합시켜 표시할 수도 있다.
사용법
사용법을 설명하다.package main
import (
"path/to/tsukumaru/go-staticmaps" //cloneしてきたパス
"github.com/fogleman/gg"
"github.com/golang/geo/s2"
)
func main() {
ctx := sm.NewContext()
spot := s2.LatLngFromDegrees(35.6259434, 139.7251859)
icon := sm.NewIcon(spot, "tsukumaru.jpeg", 30 ) //座標、画像のパス、サイズ
icon.SetOffset(0, 0) //オフセット
ctx.AddIcon(icon)
// 画像として出力
img, _ := ctx.Render()
gg.SavePNG("my-map.png", img)
}
지금까지의 Marker와 Path처럼 사용할 수 있습니다.
"path/to/tsukumaru/go-staticmaps"
현재 add_icon
지점이 변경되었으니 사용하려면 clonetsukumaru/go-staticmaps지점을 변경하세요.
NewIcon 함수
이미지를 표시할 좌표, 이미지 경로 및 크기를 지정합니다.
크기는 지정한 너비와 높이의 수치로 초기화되며, 각각 변경하려면 SetWidth
함수를 사용합니다.
SetHeight 함수
이 함수는 Offset을 지정합니다.
기본적으로 이미지는 지정된 점을 중심으로 표시되므로 조금 위로 올리려는 경우에 사용합니다.
이루어지다
실장한 내용으로 그렇게 어려운 일은 하지 않았다. 다음은 전부다.
https://github.com/tsukumaru/go-staticmaps/blob/add_icon/icon.go#L75-L81 img = resize.Resize(i.Width, i.Height, img, resize.Lanczos3) //画像のリサイズ
//指定された場所を中心として画像が表示されるように
x, y := trans.ll2p(i.Position)
ix := int(x) - int(i.Width/2)
iy := int(y) - int(i.Height/2)
//オフセットつきで画像を描画
gc.DrawImageAnchored(img, ix, iy, i.Offset[0], i.Offset[1])
그림 크기는 다음 프로그램 라이브러리를 사용하여 지정한 크기로 조정합니다.보완 함수의 지정은 무의식중에 지정한 것이다...
https://github.com/nfnt/resize SetOffset
이 함수는 내부에 정의된 함수로 trans.ll2p
형에서 내부 좌표로 변환할 수 있다.
https://github.com/flopp/go-staticmaps/blob/master/context.go#L292-L308
그림 그리기에는 LatLng
의 편이량 fogleman/gg
을 고려하여 적당한 함수가 있습니다.
https://github.com/fogleman/gg/blob/master/context.go#L575-L591
합성 이미지 같은 게 필요하지 않을까 해서 단순히 그림을 그리면 될 것 같아요.
총결산
goo-staticmaps로 지도 이미지에 임의의 이미지를 표시하기 위해 DrawImageAnchored
라는 새로운 기능을 설치해 보았습니다.기존 기능과 동일하게 사용할 수 있습니다.
하지만 아직 명령행에 대응하지 않았습니다. 개선할 점이 많습니다. 개선한 후에 p-r를 내면 좋겠습니다!
내일은 @tenmihi입니다.기대된다!
Reference
이 문제에 관하여(goo-staticmaps 지도에 임의의 그림을 아이콘으로 표시하려면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tsukumaru/items/0f71943366bd7f8d63c8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
gc.DrawArc(x, y-m.Size, radius, (90.0+60.0)*math.Pi/180.0, (360.0+90.0-60.0)*math.Pi/180.0)
gc.LineTo(x, y)
gc.ClosePath()
gc.SetColor(m.Color)
gc.FillPreserve()
gc.SetRGB(0, 0, 0)
gc.Stroke()
package main
import (
"path/to/tsukumaru/go-staticmaps" //cloneしてきたパス
"github.com/fogleman/gg"
"github.com/golang/geo/s2"
)
func main() {
ctx := sm.NewContext()
spot := s2.LatLngFromDegrees(35.6259434, 139.7251859)
icon := sm.NewIcon(spot, "tsukumaru.jpeg", 30 ) //座標、画像のパス、サイズ
icon.SetOffset(0, 0) //オフセット
ctx.AddIcon(icon)
// 画像として出力
img, _ := ctx.Render()
gg.SavePNG("my-map.png", img)
}
img = resize.Resize(i.Width, i.Height, img, resize.Lanczos3) //画像のリサイズ
//指定された場所を中心として画像が表示されるように
x, y := trans.ll2p(i.Position)
ix := int(x) - int(i.Width/2)
iy := int(y) - int(i.Height/2)
//オフセットつきで画像を描画
gc.DrawImageAnchored(img, ix, iy, i.Offset[0], i.Offset[1])
goo-staticmaps로 지도 이미지에 임의의 이미지를 표시하기 위해
DrawImageAnchored
라는 새로운 기능을 설치해 보았습니다.기존 기능과 동일하게 사용할 수 있습니다.하지만 아직 명령행에 대응하지 않았습니다. 개선할 점이 많습니다. 개선한 후에 p-r를 내면 좋겠습니다!
내일은 @tenmihi입니다.기대된다!
Reference
이 문제에 관하여(goo-staticmaps 지도에 임의의 그림을 아이콘으로 표시하려면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tsukumaru/items/0f71943366bd7f8d63c8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)