2013-11-25 3 views
2

Я новичок в библиотеке GeoTools для Java, и я просто пытаюсь нарисовать многоугольник на карте. Я использую GPS-координаты для очков, которые рисуют просто отлично, но я просто не могу понять, как рисовать LineString между ними, чтобы спасти мою жизнь.GeoTools: рисование многоугольников на карте

Я проверил все учебники на geotools.org, а также this posting, но безрезультатно. Должно ли это быть настолько сложным? Может ли кто-нибудь, возможно, опубликовать фрагменты кода, необходимые для рисования LineString? Это то, что я пытался в прошлом:

SimpleFeatureType lineType = DataUtilities.createType("LINE", "geom:LineString,name:String"); 
SimpleFeatureBuilder featureBuilderLines = new SimpleFeatureBuilder(lineType); 
SimpleFeatureCollection collectionLines = FeatureCollections.newCollection(); 

LineString line = builder.createLineString(listOfPoints); 
featureBuilderLines.add(line); 
SimpleFeature featureLine = featureBuilderLines.buildFeature(null); 
((DefaultFeatureCollection)collectionLines).add(featureLine);  
Style lineStyle = SLD.createLineStyle(Color.RED, 2.0f); 
map.addLayer(new FeatureLayer(collectionLines, lineStyle)); 

Спасибо и заранее и наилучшими пожеланиями

+0

Пожалуйста, добавьте код, чтобы мы могли видеть, что вы пытались. –

+0

Я добавил код. – user3032769

+0

если вы проверите линию, что она содержит? –

ответ

0

Вы, кажется, смешивания типов геометрии, попробовать что-то вроде:

import org.geotools.geometry.jts.JTSFactoryFinder; 

import com.vividsolutions.jts.geom.Coordinate; 
import com.vividsolutions.jts.geom.LineString; 

public class TestLineBuilder { 
    public static void main(String[] args) { 

    com.vividsolutions.jts.geom.GeometryFactory gFac = JTSFactoryFinder.getGeometryFactory(); 
    Coordinate[] coordinates = new Coordinate[2]; 
    coordinates[0] = new Coordinate(1,3); 
    coordinates[1] = new Coordinate(3,8); 
    LineString line =gFac.createLineString(coordinates); 
    System.out.println(line); 
    } 
} 

, которая дает правильный вид ответа для меня.

+0

Ah okay - Кажется, я неправильно понимаю концепцию систем координат. Я хотел бы определить координаты как широта/longitute. Это возможно? – user3032769

+0

вы можете поместить любые значения в координаты (я просто выбрал простые ints) - –

+0

этот код просто реализует вашу строку LineString = builder.createLineString (listOfPoints); –

0

Борьба с этим. Наконец, он заработал для сохранения карты на изображение (png), используя смесь различных фрагментов из Интернета. Отображение карты через JMapFrame.showMap(map); приводит к исключению и сбою. Во всяком случае, мне нужен был образ. Пример для строки с двумя точками показан ниже. Добавление полилинии с большим количеством точек должно быть одинаковым:

SimpleFeatureTypeBuilder b = new SimpleFeatureTypeBuilder(); 

b.setName("LineFeature"); 

//add a geometry property 
b.setCRS(DefaultGeographicCRS.WGS84); // set crs first 
b.add("line", LineString.class); // then add geometry 

//build the type 
final SimpleFeatureType TYPE = b.buildFeatureType(); 

SimpleFeatureBuilder featureBuilderLines = new SimpleFeatureBuilder(TYPE); 

SimpleFeatureCollection collectionLines = new DefaultFeatureCollection("internal",TYPE); 

GeometryFactory gFac = JTSFactoryFinder.getGeometryFactory(JTSFactoryFinder.EMPTY_HINTS); 
Coordinate[] coordinates = new Coordinate[2]; 

double latStart = 44.9; 
double lonStart = 14.9; 

double latEnd = 12.1; 
double lonEnd = 9.4; 

coordinates[0] = new Coordinate(lonStart, latStart); 
coordinates[1] = new Coordinate(lonEnd, latEnd); 

LineString line = gFac.createLineString(coordinates); 

featureBuilderLines.add(line); 
SimpleFeature featureLine = featureBuilderLines.buildFeature(null); 
collectionLines.add(featureLine); 

float lineWidt = 2.0f; 

Style lineStyle = SLD.createLineStyle(Color.red, lineWidth); 

SimpleFeatureSource collectionFeatureSource = new CollectionFeatureSource(collectionLines); 

map.addLayer(collectionFeatureSource, lineStyle); 
Смежные вопросы