http://mtaalamu.ru
Напомню, что координаты объектов на Google-картах были известны. Используя сервис статических карт нужно было оснастить записи картинками. Вот как это сделано:
db = Sql.newInstance('jdbc:hsqldb:file:/path/to/db', 'SA', '', 'org.hsqldb.jdbc.JDBCDriver')
query = 'update name_descr_latlon set "mapimg"=? where "id"=?'
db.eachRow('select "id", "latlon" from name_descr_latlon where not ("latlon" is null) and "mapimg" is null'){ row ->
println row.id
url = new URL("http://maps.google.com/staticmap?markers=${row.latlon}&zoom=14&size=420x340")
baos = new ByteArrayOutputStream()
stream2stream(url.openStream(), baos)
ba = baos.toByteArray()
db.execute(query, [ba, row.id])
}
Задействованный здесь метод stream2stream() я уже публиковал на Мтааламу, но, чтобы далеко не лазить, приведу еще раз:
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import groovy.sql.Sql
def stream2stream = {is, os ->
src = Channels.newChannel(is);
dest = Channels.newChannel(os);
buffer = ByteBuffer.allocateDirect(16 * 1024);
while (src.read(buffer) != -1) {
buffer.flip();
dest.write(buffer);
buffer.compact();
}
buffer.flip();
while (buffer.hasRemaining())dest.write(buffer);
}
Во избежание злоупотреблений, Google выдает за определенный небольшой промежуток времени не более 50 карт, так что скрипт пришлось запускать 3 раза с небольшими (пара минут) интервалами.]]>
В MS-Access вставлять картинки в базу данных можно давно. Оказывается, входящая в состав пакета OpenOffice компонента для ведения баз данных ooBase тоже обладает такой возможностью.
Достаточно в таблице завести поле типа VARBINARY, а в форме сопоставить ему элемент управления «Изображение». Загрузить картинки для каждой записи базы данных можно щелкнув по элементу управления правой кнопкой и выбрав файл. А можно и автоматически, но об этом и других чудесах ooBase чуть позже.]]>