Создание слоя / карты из файла kml в приложение Java - PullRequest
0 голосов
/ 07 мая 2019

Я хочу создать слой карты с использованием KML с библиотекой Geotools в приложении Java (на основе Eclipse). Считывание данных KML из файлов работает, но я не знаю, как сделать из него слой.

Проблема (я не уверен), возможно, заключается в том, чтобы отобразить KML как карту:

public void render(final Graphics2D g2d) {
        if (map != null) {
            if (log.isDebug() && Component.traceLevel == 1) {
                log.debug("KmlLayer(" + getName() + ").render()");
            }
            final GTRenderer renderer = new StreamingRenderer();
            Rectangle imageBounds = null;
            renderer.setMapContent(map);

            imageBounds = new Rectangle(0, 0, viewport.getWidth(), viewport.getHeight());

            Point mapPos = viewport.getMapPosition();
            Point endPos = viewport.getMapPosition();
            endPos.x += imageBounds.width;
            endPos.y += imageBounds.height;
            Projection proj = viewport.getProjection();
            Point2D p1 = proj.getLongitudeLatitude(mapPos, viewport.getZoom());
            Point2D p2 = proj.getLongitudeLatitude(endPos, viewport.getZoom());
            CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84;

            CoordinateReferenceSystem destCRS = null;
            ReferencedEnvelope mapBounds = null;
            try {
                // This is the WKT (Well Known Text) Definition for the Mercator
                // Projection. Source: http://spatialreference.org/ref/
                // You need this definition because geotools does not include it
                destCRS = CRS.parseWKT("PROJCS[\"WGS 84 / World Mercator\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\"," +
                    "SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]," +
                    "PROJECTION[\"Mercator\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0]," + "UNIT[\"Meter\",1]]");

                // At this point the Envelope for the map is created. In the same
                // step it has to be transformed from WGS 84 to Mercator
                mapBounds = new ReferencedEnvelope(p1.getX(), p2.getX(), p1.getY(), p2.getY(), sourceCRS).transform(destCRS, true);
                renderer.paint(g2d, imageBounds, mapBounds);
            } catch (FactoryException e) {
                if (log.isDebug()) {
                    log.debug("KmlLayer(" + getName() + ").render(): FactoryException caught!", e);
                }
            } 
...