Changeset 31659 in osm for applications/editors/josm/plugins/seachart/src
- Timestamp:
- 2015-10-21T11:34:01+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified applications/editors/josm/plugins/seachart/src/s57/S57map.java ¶
r31157 r31659 767 767 feature.geom.area = 0; 768 768 if (feature.geom.prim == Pflag.POINT) { 769 feature.geom.centre = findCentroid(feature);769 feature.geom.centre = nodes.get(feature.geom.elems.get(0).id); 770 770 return true; 771 771 } else { … … 826 826 } 827 827 if (feature.geom.prim == Pflag.AREA) { 828 if (signedArea(feature.geom) < 0.0) { 829 830 }; 831 feature.geom.area = calcArea(feature.geom); 828 int ie = 0; 829 int ic = 0; 830 while (ie < feature.geom.elems.size()) { 831 double area = calcArea(feature.geom, ic); 832 if (ie == 0) feature.geom.area = Math.abs(area) * 3444 * 3444; 833 if (((ie == 0) && (area < 0.0)) || ((ie > 0) && (area >= 0.0))) { 834 ArrayList<Prim> tmp = new ArrayList<Prim>(); 835 for (int i = 0; i < feature.geom.comps.get(ic).size; i++) { 836 Prim p = feature.geom.elems.remove(ie); 837 p.forward = !p.forward; 838 tmp.add(0, p); 839 } 840 feature.geom.elems.addAll(ie, tmp); 841 } 842 ie += feature.geom.comps.get(ic).size; 843 ic++; 844 } 832 845 } 833 846 feature.geom.length = calcLength(feature.geom); 834 feature.geom.centre = findCentroid(feature);847 feature.geom.centre = calcCentroid(feature); 835 848 return true; 836 849 } … … 951 964 } 952 965 953 double signedArea(Geom geom) {966 double calcArea(Geom geom, int comp) { 954 967 Snode node; 955 968 double lat, lon, llon, llat; … … 957 970 double sigma = 0; 958 971 GeomIterator git = new GeomIterator(geom); 959 if (git.hasComp()) { 960 git.nextComp(); 961 while (git.hasEdge()) { 962 git.nextEdge(); 963 while (git.hasNode()) { 964 node = git.next(); 965 if (node == null) continue; 966 llon = lon; 967 llat = lat; 968 lat = node.lat; 969 lon = node.lon; 970 sigma += (lon * Math.sin(llat)) - (llon * Math.sin(lat)); 971 } 972 for (int i = 0; i <= comp; i++) { 973 if (git.hasComp()) { 974 git.nextComp(); 975 while (git.hasEdge()) { 976 git.nextEdge(); 977 while (git.hasNode()) { 978 node = git.next(); 979 if (node == null) 980 continue; 981 llon = lon; 982 llat = lat; 983 lat = node.lat; 984 lon = node.lon; 985 sigma += (lon * Math.sin(llat)) - (llon * Math.sin(lat)); 986 } 987 } 988 if (i != comp) 989 sigma = lat = lon = llon = llat = 0; 972 990 } 973 991 } … … 975 993 } 976 994 977 public boolean handOfArea(Geom geom) { 978 return (signedArea(geom) < 0); 979 } 980 981 public double calcArea(Geom geom) { 982 return Math.abs(signedArea(geom)) * 3444 * 3444; 983 } 984 985 public double calcLength(Geom geom) { 995 double calcLength(Geom geom) { 986 996 Snode node; 987 997 double lat, lon, llon, llat; … … 1013 1023 } 1014 1024 1015 public Snode findCentroid(Feature feature) {1025 Snode calcCentroid(Feature feature) { 1016 1026 double lat, lon, slat, slon, llat, llon; 1017 1027 llat = llon = lat = lon = slat = slon = 0;
Note:
See TracChangeset
for help on using the changeset viewer.